今天做項目遇到點擊element的多選框,通過change事件發現v-model的值變化了,但是頁面上沒有勾選上
<el-checkbox v-model="mData.isCheck" @change="changeCheck($event,mData)"></el-checkbox>
原因:手動添加數據的問題,我將后端返回的數組手動將數組中的每個對象都添加一個key:value鍵值對的值,然后通過這個值去控制多選框的選中
一開始我是這樣做的
var result = data.list.map(function(item) { item.isCheck = false return item }) this.mListDatas.list = result
上面的做法點擊多選框,isCheck的值變化了,但是頁面上沒有反應,原因是我們是手動添加的isCheck字段,這樣添加的字段數據不是響應式的,沒有get set屬性,所以需要用vue的set方法添加對象屬性,
下面是正確的做法:
that.mListDatas = data; // 從后台返回的數據沒有isCheck這個字段 var result = data.list.map(function(item) { that.$set(item,'isCheck',false) return item }) that.mListDatas = result // 這樣數組中的每一個對象都有isCheck這個字段
另一種做法給數組中的對象添加一個鍵值對,這種方法時直接返回一個新的數組
let array = [] data.list.map(function(item) { array.push( Object.assign({},item,{isSelectList:[]}) ) })