Skip to content

Commit 86f0d11

Browse files
committed
fix dependency collection for multi-nested arrays (fix #3883)
1 parent 3446d14 commit 86f0d11

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/core/observer/index.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,7 @@ export function defineReactive (
155155
childOb.dep.depend()
156156
}
157157
if (Array.isArray(value)) {
158-
for (let e, i = 0, l = value.length; i < l; i++) {
159-
e = value[i]
160-
e && e.__ob__ && e.__ob__.dep.depend()
161-
}
158+
dependArray(value)
162159
}
163160
}
164161
return value
@@ -234,3 +231,17 @@ export function del (obj: Object, key: string) {
234231
}
235232
ob.dep.notify()
236233
}
234+
235+
/**
236+
* Collect dependencies on array elements when the array is touched, since
237+
* we cannot intercept array element access like property getters.
238+
*/
239+
function dependArray (value: Array<any>) {
240+
for (let e, i = 0, l = value.length; i < l; i++) {
241+
e = value[i]
242+
e && e.__ob__ && e.__ob__.dep.depend()
243+
if (Array.isArray(e)) {
244+
dependArray(e)
245+
}
246+
}
247+
}

0 commit comments

Comments
 (0)