Просмотр исходного кода

fix dependency collection for multi-nested arrays (fix #3883)

Evan You 9 лет назад
Родитель
Сommit
86f0d114ec
1 измененных файлов с 15 добавлено и 4 удалено
  1. 15 4
      src/core/observer/index.js

+ 15 - 4
src/core/observer/index.js

@@ -155,10 +155,7 @@ export function defineReactive (
           childOb.dep.depend()
           childOb.dep.depend()
         }
         }
         if (Array.isArray(value)) {
         if (Array.isArray(value)) {
-          for (let e, i = 0, l = value.length; i < l; i++) {
-            e = value[i]
-            e && e.__ob__ && e.__ob__.dep.depend()
-          }
+          dependArray(value)
         }
         }
       }
       }
       return value
       return value
@@ -234,3 +231,17 @@ export function del (obj: Object, key: string) {
   }
   }
   ob.dep.notify()
   ob.dep.notify()
 }
 }
+
+/**
+ * Collect dependencies on array elements when the array is touched, since
+ * we cannot intercept array element access like property getters.
+ */
+function dependArray (value: Array<any>) {
+  for (let e, i = 0, l = value.length; i < l; i++) {
+    e = value[i]
+    e && e.__ob__ && e.__ob__.dep.depend()
+    if (Array.isArray(e)) {
+      dependArray(e)
+    }
+  }
+}