suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Javascript – Vue-Variablenaktualisierung kann keine Dom-Aktualisierung auslösen

Wie unten gezeigt, verwende ich v-for, um diese Artikelliste in HTML darzustellen, und steuere durch die Aktivierung jedes Artikels, ob der diesem Artikel entsprechende HTML-Code angezeigt (v-show) werden soll.
Wenn Sie jedoch wie folgt über die Ereignismethode „Item“ auswählen und die „itemList“ ändern, wird der Dom nicht aktualisiert? ? ?

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;
        },
        
    },
});
女神的闺蜜爱上我女神的闺蜜爱上我2755 Tage vor1127

Antworte allen(10)Ich werde antworten

  • 仅有的幸福

    仅有的幸福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;
            },
            
        },
    });

    Antwort
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:31:44

    vue.itemList[index].active = true; vue改成this

    Antwort
    0
  • 滿天的星座

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

    selectItem里console.log(index)有值吗,应该是用this来获取这个vue对象

    Antwort
    0
  • 曾经蜡笔没有小新

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

    修改数据方法都不对,不报错吗?

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

    Antwort
    0
  • 某草草

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

    按照你提供的数据格式,我试了一下,是可以的,代码如下
    `<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>`

    Antwort
    0
  • 扔个三星炸死你

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

    在vue内部 不是通过vue来点 即使你用了一个变量来保存 vue的实例 通过 this

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

    Antwort
    0
  • 阿神

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

    你html里面怎么写的,虽然你这js代码写的不够优雅,比如这里使用数组比对象更合适,但是也没错,我觉得你dom没有渲染不是这里的问题,应该是绑定表单控制,如select 数据单向流的问题。

    Antwort
    0
  • 巴扎黑

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

    键值的模式不能被vue监听到,vue提供了$set的方法。。删除也需要
    selectItem: function (index) {

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

    },

    Antwort
    0
  • 習慣沉默

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

    把Vue改为this试下

    Antwort
    0
  • typecho

    typecho2017-06-12 09:31:44

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

    Antwort
    0
  • StornierenAntwort