Vue - игнорировать наблюдателя при первой конкретной инициализации - PullRequest
0 голосов
/ 17 марта 2019

У меня есть случай, когда я не могу двигаться дальше, и я буду признателен за вашу помощь.В моем компоненте vue у меня есть наблюдатель для свойств модели "foo" aaa и bbb, например:

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

есть несколько входов выбора и выбор с моделью foo.bbb зависит от выбора с помощьюмодель foo.aaa, поэтому мне нужно установить bbb в ноль при изменении aaa.

Теперь мне нужно решить случай, когда я изменяю foo объект и устанавливаю его свойства из метода created миксина.В том случае, когда я меняю его на mixin, мне нужно игнорировать watcher's, потому что он всегда имеет нулевое свойство bbb.Можете ли вы сказать мне, как это решить?Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Похоже, вы должны управлять состоянием как объектом манипулируют.Например, создайте логическое значение данных с именем что-то вроде editedFromMixin, которое по умолчанию равно false.

При изменении значений из метода created вашего миксина обновите editedFromMixin до true.

Затем в ваших наблюдателях проверьте, является ли editedFromMixin ложным, перед установкой foo.bbb в null.И, наконец, также в вашем миксине, в конце переверните editedFromMixin обратно к значению по умолчанию false.

Эффект изменений из миксина установит флаг, который не позволит вашим наблюдателям вносить нежелательные изменения - нотолько один раз за итерацию обновлений.

0 голосов
/ 17 марта 2019

Как насчет использования oldVal, чтобы определить, находится ли наблюдатель в первой конкретной инициализации или нет.Может быть, это будет выглядеть так ...

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

Надеюсь, я не правильно понял ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...