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 prop
changements ou myArray
des é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.
keys
intérieur d'un objet? Exemple:"item.*": function(val){...}
"item.someOtherProp": function (newVal, oldVal){
comme suggéré par @Ron.