vue復雜數據類型多層嵌套的監聽
本來看前輩的做法是watch的嵌套,遇到這種復雜的數據結構還是不多,分享一下前輩的做法
let stopChildWatchList = [] // 用于存放每個子監聽器watch(() => data,(val) => {// 清除舊監聽stopChildWatchList.forEach(stop => stop())stopChildWatchList = []val.forEach((item, i) => {item.children.forEach((child, j) => {const stop = watch(() => child.tags,(newTags) => {console.log(`data[${i}].children[${j}].tags changed:`, newTags)},{ deep: true })stopChildWatchList.push(stop)})})},{ deep: true, immediate: true }
)
后面我感覺有點不太好讀,就去找了一下另一種做法,比較易懂,給自己做個記號
watch(() =>data.flatMap(item =>item.children.flatMap(child => [...child.tags])),(newVal) => {console.log('所有 tags 改了:', newVal)}
)