recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - La mise à jour de la variable vue ne peut pas déclencher la mise à jour de dom

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;
        },
        
    },
});
女神的闺蜜爱上我女神的闺蜜爱上我2725 Il y a quelques jours1108

répondre à tous(10)je répondrai

  • 仅有的幸福

    仅有的幸福2017-06-12 09:31:44

    // 你的数据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;
            },
            
        },
    });

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:31:44

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

    répondre
    0
  • 滿天的星座

    滿天的星座2017-06-12 09:31:44

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

    ?

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-12 09:31:44

    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;
            }
        },
    });

    répondre
    0
  • 某草草

    某草草2017-06-12 09:31:44

    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>`

    répondre
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:31:44

    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;

    répondre
    0
  • 阿神

    阿神2017-06-12 09:31:44

    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.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-06-12 09:31:44

    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)

    },

    répondre
    0
  • 習慣沉默

    習慣沉默2017-06-12 09:31:44

    Changez Vue par ceci et essayez-le

    répondre
    0
  • typecho

    typecho2017-06-12 09:31:44

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

    répondre
    0
  • Annulerrépondre