搜尋

首頁  >  問答  >  主體

javascript - vue變數更新無法觸發dom更新

如下所示,我在html用v-for渲染這個itemList,透過每個item的active控制是否顯示(v-show)這個item對應的html。
但是,像這樣透過事件方法selectItem,改變了itemList,dom卻不更新? ? ?

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;
        },
        
    },
});
女神的闺蜜爱上我女神的闺蜜爱上我2721 天前1101

全部回覆(10)我來回復

  • 仅有的幸福

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

    雷雷

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:31:44

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

    回覆
    0
  • 滿天的星座

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

    selectItem裡console.log(index)有值嗎,應該是用this來取得這個vue物件

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

    回覆
    0
  • 某草草

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

    依照你提供的資料格式,我試了一下,是可以的,程式碼如下
    `


  • {{item.text}}



  • `

    回覆
    0
  • 扔个三星炸死你

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

    在vue內部 不是透過vue來點 即使你用了一個變數來保存 vue的實例 透過 this

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

    回覆
    0
  • 阿神

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

    你html裡面怎麼寫的,雖然你這js程式碼寫的不夠優雅,例如這裡使用陣列比物件更合適,但是也沒錯,我覺得你dom沒有渲染不是這裡的問題,應該是綁定表單控制,如select 資料單向流的問題。

    回覆
    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)

    },

    回覆
    0
  • 習慣沉默

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

    把Vue改為this試用

    回覆
    0
  • typecho

    typecho2017-06-12 09:31:44

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

    回覆
    0
  • 取消回覆