Vue-在第一个特定的初始化中忽略观察者

时间:2019-03-17 13:59:09

标签: javascript vue.js vuejs2 vue-component vue-mixin

我有一些无法继续使用的用例,感谢您的帮助。在我的Vue组件中,我可以监视模型“ foo”的属性aaabbb,如下所示:

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

有多个选择输入,模型foo.bbb的选择取决于模型foo.aaa的选择,因此当bbb更改时,我需要将aaa设置为null。

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

2 个答案:

答案 0 :(得分:0)

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

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

希望我不会误解您的问题。

答案 1 :(得分:0)

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

从混合的created方法更改值时,请将editedFromMixin更新为true

然后,在您的观察者中,将editedFromMixin设置为foo.bbb之前检查null是否为假。最后,在混入中,最后将editedFromMixin翻转回默认的false

效果是来自mixin的更改将设置标志,阻止您的观察者进行不必要的更改-但每次更新仅进行一次。