javascript - La mise à jour de la variable vue ne peut pas déclencher la mise à jour de dom
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-12 09:29:44
0
10
1132

Comme indiqué ci-dessous, j'utilise v-for pour restituer cette liste d'éléments en HTML et contrôler s'il faut afficher (v-show) le code HTML correspondant à cet élément via l'actif de chaque élément.
Cependant, si vous sélectionnezItem via la méthode événementielle comme celle-ci et modifiez la itemList, le dom n'est pas mis à jour ? ? ?

var vue = new Vue({
    el: '#app',
    data: {
        itemList:{
            '1':{'text':'abc', 'active':false},
            '2':{'text':'abc', 'active':true}
         },
    },
    methods: {
        selectItem: function (index) {
            vue.itemList[index].active = true;
        },
        
    },
});
女神的闺蜜爱上我
女神的闺蜜爱上我

répondre à tous(10)
仅有的幸福
// 你的数据itemList结构改改
var vue = new Vue({
    el: '#app',
    data: {
        itemList:[
            {'text':'abc', 'active':false},
            {'text':'abc', 'active':true}
         ],
    },
    methods: {
        selectItem: function (index) {
            this.itemList[index].active = true;
        },
        
    },
});
phpcn_u1582

vue.itemList[index].active = true; vue modifiée en ceci

滿天的星座

Y a-t-il une valeur pour console.log(index) dans selectItem Vous devriez l'utiliser pour obtenir cet objet vue

?
曾经蜡笔没有小新

La méthode de modification des données est incorrecte, donc aucune erreur n'est signalée ?

var vue = new Vue({
    el: '#app',
    data: {
        itemList:[
            {'text':'abc', 'active':false},
            {'text':'abc', 'active':true}
         ]
    },
    methods: {
        selectItem: function (index) {
            this.itemList[index].active = true;
        }
    },
});
某草草

Selon le format de données que vous avez fourni, je l'ai essayé et cela fonctionne. Le code est le suivant
`<p id="app">
<li v-for="(item,index) in itemList" v-on:click="selectItem(index)" v-if="item.active">

{{item.text}}

</li>
</p>
<script>

var vue = new Vue({
    el: '#app',
    data: {
        itemList:{
            '1':{'text':'abc1', 'active':true},
            '2':{'text':'abc2', 'active':true}
        },
    },
    methods: {
        selectItem: function (index) {
            console.log(vue.itemList[index].active);
            vue.itemList[index].active = false;
        },

    },
});

</script>`

扔个三星炸死你

Dans vue, ce n'est pas via vue Même si vous utilisez une variable pour enregistrer l'instance de vue via ceci

vue.itemList[index].active = true;  
换成
this.itemList[index].active = true;
阿神

Comment l'écrivez-vous dans votre html ? Bien que votre code js ne soit pas assez élégant, par exemple, il est plus approprié d'utiliser des tableaux au lieu d'objets ici, mais ce n'est pas faux, je pense que l'échec du rendu de votre dom est dû. ce n'est pas le problème ici. Cela devrait être lié au contrôle de formulaire, comme le problème du flux unidirectionnel de données sélectionnées.

巴扎黑

Le mode valeur clé ne peut pas être surveillé par vue, vue fournit la méthode $set. . La suppression nécessite également
selectItem : function (index) {

var newA  = this.itemList[index];
newA.active = true
this.$set(this.itemList,index,newA)

},

習慣沉默

Changez Vue par ceci et essayez-le

typecho

this.itemList.splice(index, 1, Object.assign({}, this.itemList[index], { active: true }))

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal