今天在實作一個功能時又學到了一點小知識,就如我標題寫的這樣,這也是我今日遇到的問題。
昨天我得知了一個新的需求,需要在目前開發的網站上增加一個發出音效的功能。
那這個音效會在兩種狀況下觸發。
第一個狀況下沒甚麼問題,很容易處理,
所以原先我認為只要將一樣的程式碼從主動點擊的那邊放到 Watch 之中就好了。
就像下面這樣 ⬇️
watch: {
score: function (newValue, oldValue) {
if (this.$store.state.live.soundEffectSwitch === true) {
let soundPlay = document.querySelector("#soundEffect")
soundPlay.play()
}
}
}
結果當然就是報錯啦,查了一下後才知道原來 Watch 階段 DOM 元素還沒有渲染好,
自然而然的就取得不到元素而報錯誤了。
那因為我們變動的資料會是在DOM掛載好才有可能發生改變,
所以我就將取得元素即播放的部分寫成另一個 Methods,
經過測試後也是可以正常執行了,順利解決這個問題。⬇️
methods: {
soundEffectPlay() {
let soundPlay = document.querySelector("#soundEffect")
soundPlay.play()
}
},
watch: {
score: function (newValue, oldValue) {
if (this.$store.state.live.soundEffectSwitch === true) {
this.soundEffectPlay()
}
}
}
也順便將主動觸發的那部分統一改成觸發 soundEffectPlay 這個 Function 。