亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Vue.js 如何在 data 里含數組的情況下,監聽數組內指定屬性的變化?

Vue.js 如何在 data 里含數組的情況下,監聽數組內指定屬性的變化?

慕桂英546537 2019-05-21 11:37:17
在含有數組的時候,不知道watch里該如何寫,可以監聽單個屬性值的變化(而不是監聽整個數組的變化)。代碼如下:data:{items:{[{'name':'zxxxx','a':false,'b':true},{'name':'zxxxx','a':false,'b':true},{'name':'zxxxx','a':false,'b':true}];}},watch:{items:{handler:function(val,old){//code...},deep:true}}如果items里沒有數組結構,直接是鍵值對,watch里可以寫成items.key,但是有了數組,不知道該怎么寫了。上面的代碼是深度監聽,不僅過重,有時甚至無法達到想要的效果。求指教~
查看完整描述

2 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

如果你要監聽某個索引的某個屬性也是能寫的。。。
watch:{
'items.2.name':foo
}
如果是所有子項的某類屬性,先使用計算屬性做個計算(比如字符串全部拼接,數字求和),然后watch這個計算屬性,來獲取屬性變化的實際,但是不能準確具體的拿到變化的值的位置信息(index、key)。
然后我覺得你可以換種解決方式,你的最終邏輯目的是什么,值的變化是什么引起的?能不能從操作的地方入手,比如是用戶使用input修改了這個值,能不能提交的時候直接提供index和key屬性,直接獲取變化位置呢?
                            
查看完整回答
反對 回復 2019-05-21
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

除了一個一個寫外,比如監聽數組0中的name,就寫成'items.0.name',顯然這不現實。還有一個方法是將你要用到的數組中的數據寫在computed中,然后去監聽這個computed的值,當數組變化時也會觸發watch。
computed:{
itemsA:function(){
leta=this.items.forEach(()=>XXX)
returna
}
}
watch:{
itemsA:{
handler:function(val,old){
console.log(val,old)
},
}
},
                            
查看完整回答
反對 回復 2019-05-21
  • 2 回答
  • 0 關注
  • 1224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號