VueJS:手动触发对观察到的更新 object/array

VueJS : manually trigger an update into observed object/array

我为数据反应创建了一个 vue 对象:

let vm = new Vue({
  data () {
    return {
      myData: {}
    }
  },
  watch: {
    myData (value) {
      console.log('changed')
    }
  }
})

当我推送/编辑/删除到vm.myData时,一切正常,观察者发送给我changed

现在,我只想通过 "touching" vm.myData 获得 changed 事件 (没有数据编辑)。我可以为此调用观察者的内部方法吗?

既然是对象(对象是传引用,不是传值),可以这样写

vm.myData = Object.assign({},vm.myData);

这会创建一个具有完全相同值的新对象,但它是一个新对象,因此会触发观察器。

https://codepen.io/jacobgoh101/pen/RQeLoM?editors=1011

好的,我有办法了。

我们可以从附加的观察者触发 notify() 方法:

vm.myData.__ob__.dep.notify()

当 vuejs 修补原始方法以使数据响应时,我从源代码中找到了它。

https://github.com/vuejs/vue/blob/dev/src/core/observer/array.js#L42