Преглед изворни кода

locate first non-abstract parent as $parent

Evan You пре 9 година
родитељ
комит
cdca16348d
1 измењених фајлова са 10 додато и 4 уклоњено
  1. 10 4
      src/core/instance/lifecycle.js

+ 10 - 4
src/core/instance/lifecycle.js

@@ -8,12 +8,18 @@ import { warn, validateProp, remove, noop } from '../util/index'
 export function initLifecycle (vm: Component) {
   const options = vm.$options
 
-  vm.$parent = options.parent
-  vm.$root = vm.$parent ? vm.$parent.$root : vm
-  if (vm.$parent && !options._abstract) {
-    vm.$parent.$children.push(vm)
+  // locate first non-abstract parent
+  let parent = options.parent
+  if (parent && !options._abstract) {
+    while (parent.$options._abstract && parent.$parent) {
+      parent = parent.$parent
+    }
+    parent.$children.push(vm)
   }
 
+  vm.$parent = parent
+  vm.$root = parent ? parent.$root : vm
+
   vm.$children = []
   vm.$refs = {}