Vue.js 如何反应式监视Vue JS数据对象是否已更改?

Vue.js 如何反应式监视Vue JS数据对象是否已更改?,vue.js,Vue.js,在Vue JS项目中,我有以下非常标准的模式: data () { model: { id: uid(), label: null, options: [] .... etc. } } model属性提供一个表单,当数据模型“脏”时,我需要显示一个警报-自上次保存以来,用户可能更改了任何键 问题是-数据可能会受到许多不同方法的影响-输入的v-model、来自子组件(如选择和切换开关等)的自定义事件以及选项数组可能会通过拖放排序、添加/删除元素等进行编辑

在Vue JS项目中,我有以下非常标准的模式:

data () {
  model: {
    id: uid(),
    label: null,
    options: []
    .... etc.
  }
}
model
属性提供一个表单,当数据模型“脏”时,我需要显示一个警报-自上次保存以来,用户可能更改了任何键

问题是-数据可能会受到许多不同方法的影响-输入的v-model、来自子组件(如选择和切换开关等)的自定义事件以及选项数组可能会通过拖放排序、添加/删除元素等进行编辑

我正在寻找-理想情况下-一个单一的反应(如计算)属性,我可以看,以了解是否模型是脏的,所以我可以提示用户保存

Vue是否有隐藏或未记录的属性/方法,如$vm.\u isDirty?我知道我可以使用compare fn手动处理它,但它不是被动的,我知道我可以在模型上使用deep watcher,但这在计算上很昂贵,而且其中一些模型相当大


其他开发人员使用了什么方法?

您只需使用deep watcher:

观察:
{
型号:
{
深:是的,
处理程序(newValue、oldValue)
{
this.modified=true;//或者当模型变脏时需要执行的任何操作
}
}
}

正如我在问题中提到的,使用deep watchers在计算上非常昂贵,因此不推荐使用,尤其是对于大型数据对象,我的问题就是这样。核心团队成员per Linus Borg:是的,深度观察者很昂贵。如果对象很大,最好不要直接修改它们,而是对每种类型的修改使用专用方法。这些方法中的每一种都将负责升起
dirty
标志,然后由廉价的观察者来观察。