鍍金池/ 問(wèn)答/C  網(wǎng)絡(luò)安全  HTML/ vue給data的屬性賦值時(shí),有時(shí)不會(huì)響應(yīng)式更新到視圖。

vue給data的屬性賦值時(shí),有時(shí)不會(huì)響應(yīng)式更新到視圖。

當(dāng)只修改data.list數(shù)組的值時(shí),控制臺(tái)打印數(shù)據(jù)已更新,但是視圖不更新。
如果家還是那個(gè)一條修改name屬性的值時(shí)。又可以了。

不知是什么原因,求教!

// this.data.name = 'web...'
this.data.list[0] = 'aaa';
this.data.list[1] = 'bbb';
this.data.list[2] = '333333';

clipboard.png

this.data.name = 'web...'
this.data.list[0] = 'aaa';
this.data.list[1] = 'bbb';
this.data.list[2] = '333333';

clipboard.png

test.vue

<template>
  <div class="v-set-wrap">
    <span class="set-item">{{data.name}}, {{data.list}}</span>
    <button @click="changeData">changeData</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      data: {
        name: 'vue',
        list: [1, 2, 3]
      }
    };
  },
  methods:{
    changeData(){
        // this.data.name = 'web...'; // 不修改name屬性值時(shí),視圖不會(huì)更新
        this.data.list[0] = 'aaa';
        this.data.list[1] = 'bbb';
        this.data.list[2] = '333333';
        console.log(this.data);
    }
  },
  mounted(){}
};
</script>
回答
編輯回答
青瓷

name是值,'list'是數(shù)組,數(shù)組操作除非是pushsplice這些增刪操作的時(shí)候,才會(huì)更新到視圖。
對(duì)對(duì)象、數(shù)組操作,這里你需要用this.$set(arr,idx,data)方法

this.$set(this.list,0,'aaa');
this.$set(this.list,1,'bbb');
this.$set(this.list,2,'333333');

$set參考

2017年7月30日 14:32
編輯回答
心上人

vue只監(jiān)聽(tīng)了數(shù)組的splice,push,unshift等方法
你可以用set來(lái)修改

2017年8月21日 14:40
編輯回答
浪婳

你這樣直接對(duì)數(shù)組操作是不會(huì)觸發(fā)dom的更新的,更改了name之后可以更新,是因?yàn)楦膎ame可以觸發(fā)dom更新,所以數(shù)組的值也能更新,要操作數(shù)組有兩種方法:
1.this.$set(this.data.list, 0,'aaaa')
2.this.data.list.splice(0, 1,'aaaa')

https://cn.vuejs.org/v2/guide...

2017年4月2日 13:54
編輯回答
乖乖噠

我覺(jué)得這是vue的一個(gè)bug!
既然數(shù)據(jù)都更新了,視圖沒(méi)更新。。

2017年5月29日 07:34
編輯回答
尐飯團(tuán)

請(qǐng)使用this.$set()來(lái)操作。

2018年2月5日 08:54