J'ai un cas d'utilisation où je ne peux pas avancer et j'apprécierai votre aide. Dans mon composant vue, j'ai un observateur pour les propriétés du modèle "foo" aaa et bbb comme ceci :

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

Il y a plusieurs entrées de sélection et la sélection avec le modèle foo.bbb dépend de la sélection avec le modèle foo.aaa, je dois donc définir bbb sur null lorsque aaa a changé.

Maintenant, j'ai besoin de résoudre le cas où je modifie l'objet foo et définit ses propriétés à partir de la méthode created de mixin. Dans ce cas, lorsque je le modifie à partir de mixin, je dois ignorer l'observateur, car il s'agit toujours de la propriété bbb nulle. Pouvez-vous me dire comment le résoudre? Merci.

0
Denis Stephanov 17 mars 2019 à 16:59

2 réponses

Meilleure réponse

Que diriez-vous d'utiliser oldVal pour déterminer si l'observateur est dans la première initialisation spécifique ou non. Peut-être que ça ressemblera à ça...

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

J'espère que je n'ai pas mal compris votre question.

0
bcjohn 17 mars 2019 à 14:56

Il semble que vous deviez gérer l'état de comment l'objet est manipulé. Par exemple, créez une valeur de données booléenne nommée quelque chose comme editedFromMixin, qui est par défaut false.

Lorsque vous modifiez les valeurs de la méthode created de votre mixin, mettez à jour editedFromMixin vers true.

Ensuite, dans vos observateurs, vérifiez si editedFromMixin est faux avant de définir foo.bbb sur null. Et enfin, également dans votre mixin, terminez en retournant editedFromMixin à la valeur par défaut false.

L'effet est que les modifications du mixin définiront le drapeau qui empêche vos observateurs d'apporter les modifications indésirables - mais seulement une fois par itération de mises à jour.

0
benjarwar 17 mars 2019 à 15:06