Skip to content

Commit 3cb7027

Browse files
committed
defer child components compilation
1 parent f4a691a commit 3cb7027

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/compiler.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ function Compiler (vm, options) {
4545
compiler.vm = vm
4646
compiler.bindings = makeHash()
4747
compiler.dirs = []
48+
compiler.deferred = []
4849
compiler.exps = []
4950
compiler.computed = []
5051
compiler.childCompilers = []
@@ -117,6 +118,11 @@ function Compiler (vm, options) {
117118
// and bind the parsed directives
118119
compiler.compile(el, true)
119120

121+
// bind deferred directives (child components)
122+
for (var i = 0, l = compiler.deferred.length; i < l; i++) {
123+
compiler.bindDirective(compiler.deferred[i])
124+
}
125+
120126
// extract dependencies for computed properties
121127
if (compiler.computed.length) {
122128
DepsParser.parse(compiler.computed)
@@ -247,7 +253,10 @@ CompilerProto.compile = function (node, root) {
247253
directive = Directive.parse('repeat', repeatExp, compiler, node)
248254
if (directive) {
249255
directive.Ctor = componentCtor
250-
compiler.bindDirective(directive)
256+
// defer child component compilation
257+
// so by the time they are compiled, the parent
258+
// would have collected all bindings
259+
compiler.deferred.push(directive)
251260
}
252261

253262
// v-with has 2nd highest priority
@@ -256,7 +265,7 @@ CompilerProto.compile = function (node, root) {
256265
directive = Directive.parse('with', withKey || '', compiler, node)
257266
if (directive) {
258267
directive.Ctor = componentCtor
259-
compiler.bindDirective(directive)
268+
compiler.deferred.push(directive)
260269
}
261270

262271
} else {

0 commit comments

Comments
 (0)