Vue - 在第一次特定初始化时忽略观察者

Vue - ignore watcher in first specific initialization

我有无法继续的用例,非常感谢您的帮助。在我的 vue 组件中,我有模型 "foo" 的属性 aaabbb 的观察者,如下所示:

watch: {
   'foo.aaa': function () {
       this.foo.bbb = null;
       this.callRest();
    },
   'foo.bbb': function () {
       this.callRest();
    },
}

有多个 select 输入和 select 模型 foo.bbb 取决于 select 模型 foo.aaa 所以我需要设置 bbbaaa 更改时为 null。

现在我需要解决修改 foo 对象并通过 mixin 的 created 方法设置其属性的情况。在那种情况下,当我从 mixin 更改它时,我需要忽略 watcher,因为它总是 null bbb 属性。你能告诉我如何解决吗?谢谢。

如何使用oldVal 来确定watcher 是否处于第一个特定的初始化中。也许它看起来像这样...

'foo.aaa': function (newVal, oldVal) {
   if(oldVal) {
     // not in first specific initialization 
     this.foo.bbb = null;
     this.callRest();
   } else {
     // in first specific initialization 
   }
},

希望我没有误解你的问题。

听起来您应该管理 如何 操作对象的状态。例如,创建一个名为 editedFromMixin 的布尔数据值,默认为 false.

当从你的 mixin 的 created 方法更改值时,将 editedFromMixin 更新为 true

然后,在您的观察者中,在将 foo.bbb 设置为 null 之前检查 editedFromMixin 是否为假。最后,同样在你的 mixin 中,结束时将 editedFromMixin 翻转回默认的 false.

效果是来自 mixin 的更改将设置标志以防止您的观察者进行不需要的更改 – 但每次更新迭代仅一次。