J'essaie de comprendre comment surveiller correctement certaines variations d'accessoires. J'ai un composant parent (fichiers .vue) qui reçoit des données d'un appel ajax, place les données dans un objet et les utilise pour rendre un composant enfant via une directive v-for, sous une simplification de mon implémentation:
<template>
<div>
<player v-for="(item, key, index) in players"
:item="item"
:index="index"
:key="key"">
</player>
</div>
</template>
... puis à l'intérieur de la <script>balise:
data(){
return {
players: {}
},
created(){
let self = this;
this.$http.get('../serv/config/player.php').then((response) => {
let pls = response.body;
for (let p in pls) {
self.$set(self.players, p, pls[p]);
}
});
}
les objets objets sont comme ceci:
item:{
prop: value,
someOtherProp: {
nestedProp: nestedValue,
myArray: [{type: "a", num: 1},{type: "b" num: 6} ...]
},
}
Maintenant, à l'intérieur du composant "joueur" de mon enfant, j'essaye de surveiller la variation de propriété d'un objet et j'utilise:
...
watch:{
'item.someOtherProp'(newVal){
//to work with changes in "myArray"
},
'item.prop'(newVal){
//to work with changes in prop
}
}
Cela fonctionne mais cela me semble un peu délicat et je me demandais si c'était la bonne façon de procéder. Mon objectif est d'effectuer une action à chaque fois que des propchangements ou myArraydes éléments nouveaux ou des variations à l'intérieur de ceux existants sont modifiés. N'hésitez pas à nous faire part de vos suggestions.
keysintérieur d'un objet? Exemple:"item.*": function(val){...}
"item.someOtherProp": function (newVal, oldVal){comme suggéré par @Ron.