目前,我的许多观察者代码如下:
watch: {
// whenever question changes, this function will run
question: function (newQuestion, oldQuestion) {
if (newQuestion != oldQuestion) {
// do something
}
}
},
我的问题是,如果我需要newQuestion != oldQuestion
,或者如果newQuestion = oldQuestion
,Vue是否不会触发观察者。如果后者是正确的,那么Vue检查什么样的不平等?仅仅是=
还是深度相等(例如,即使数组不相同,也要检查数组的元素是否相同)?
答案 0 :(得分:2)
要回答您的问题,观察者是否相等则不会触发。要检查深度相等,您可以像这样构造观察器(仅在处理非标量时需要)。
question: {
handler: () => {},
deep: true
}
希望有帮助。
答案 1 :(得分:0)
自己尝试:
new Vue({
el:"#app",
data:_=>({x:"", log:""}),
watch:{
x(nw,od){
this.log += `<hr/>old: ${od} new: ${nw} x: ${this.x}`
}
}
})
<script src="https://unpkg.com/vue@2.5.21/dist/vue.js"></script>
<div id="app">
<input v-model="x"/>
<div v-html="log"></div>
</div>