【问题标题】:Vue - ignore watcher in first specific initializationVue - 在第一次特定初始化中忽略观察者
【发布时间】:2019-08-08 00:33:12
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    如何使用 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 
       }
    },
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      效果是来自 mixin 的更改将设置一个标志,以防止您的观察者进行不希望的更改 - 但每次更新迭代只有一次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-14
        • 2020-03-15
        • 2017-01-22
        • 1970-01-01
        • 2021-09-28
        • 2013-04-01
        • 1970-01-01
        • 2017-07-24
        相关资源
        最近更新 更多