色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

vue watch 對象數組

錢多多2年前8瀏覽0評論

Vue的watch選項非常強大,它允許我們在監視數據變化時執行自定義邏輯。對象數組在Vue中是常見的數據形式,那么如何在watch選項中監聽一個對象數組的變化呢?

首先,我們需要在組件的data選項中定義一個名為items的數組:

data() {
return {
items: [
{name: 'apple', price: 2.5},
{name: 'banana', price: 1.5},
{name: 'orange', price: 3}
]
}
}

接下來,我們可以在組件的watch選項中監聽items數組的變化,代碼如下:

watch: {
items: {
handler(newVal, oldVal) {
// 監聽到items數組的變化時執行的邏輯
},
deep: true
}
}

需要注意的是,在watch選項中監聽對象或數組時,需要將deep選項設為true。這樣才能監聽到對象或數組內部數據的變化。

除了deep選項,watch選項還有一個immediate選項。它允許我們在組件加載時立即執行一次handler函數。對于對象數組來說,我們有可能需要在組件加載時立即執行一次處理函數,以保證每次組件加載時的初始狀態都是正確的。代碼如下:

watch: {
items: {
handler(newVal, oldVal) {
// 監聽到items數組的變化時執行的邏輯
},
deep: true,
immediate: true
}
}

除了監聽整個數組的變化外,我們還可以監聽數組中每個對象的變化。考慮這樣一種情況:每個商品對象都有一個price屬性,我們想要監聽price屬性的變化。代碼如下:

watch: {
items: {
handler(newVal, oldVal) {
// 監聽到items數組的變化時執行的邏輯
},
deep: true
}
},
computed: {
itemPrices() {
return this.items.map(item =>item.price)
}
},
watch: {
itemPrices: {
handler(newVal, oldVal) {
// 監聽到itemPrices數組的變化時執行的邏輯
},
deep: true
}
}

在這里,我們用計算屬性itemPrices將items數組中每個對象的price屬性提取出來,然后在watch選項中監聽itemPrices數組的變化。需要注意的是,由于數組是引用類型,因此我們不能直接監聽items[i].price,當數組中某個對象的price屬性發生變化時,items[i]本身并未發生變化,因此handler函數不會被調用。

最后需要說明的是,在監聽對象數組時,我們可以使用lodash中的_.cloneDeep方法來深拷貝數組,以監聽數組內部的數據變化。代碼如下:

import cloneDeep from 'lodash/cloneDeep'
watch: {
items: {
handler(newVal, oldVal) {
// 監聽到items數組的變化時執行的邏輯
},
deep: true
},
itemPrices: {
handler(newVal, oldVal) {
// 監聽到itemPrices數組的變化時執行的邏輯
},
deep: true
}
},
computed: {
itemPrices() {
return cloneDeep(this.items).map(item =>item.price)
}
}

這里,我們先使用lodash中的cloneDeep方法對items數組進行深拷貝,然后再提取每個對象的price屬性。這樣,在監聽itemPrices數組時,我們就能監聽到items數組內部數據的變化了。