我是否需要检查观察者中新旧价值观之间的不平等?

时间:2018-12-29 05:07:41

标签: vue.js

目前,我的许多观察者代码如下:

watch: {
  // whenever question changes, this function will run
  question: function (newQuestion, oldQuestion) {
    if (newQuestion != oldQuestion) {
       // do something
    }
  }
},

我的问题是,如果我需要newQuestion != oldQuestion,或者如果newQuestion = oldQuestion,Vue是否不会触发观察者。如果后者是正确的,那么Vue检查什么样的不平等?仅仅是=还是深度相等(例如,即使数组不相同,也要检查数组的元素是否相同)?

2 个答案:

答案 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>