@@ -45,6 +45,7 @@ function Compiler (vm, options) {
45
45
compiler . vm = vm
46
46
compiler . bindings = makeHash ( )
47
47
compiler . dirs = [ ]
48
+ compiler . deferred = [ ]
48
49
compiler . exps = [ ]
49
50
compiler . computed = [ ]
50
51
compiler . childCompilers = [ ]
@@ -117,6 +118,11 @@ function Compiler (vm, options) {
117
118
// and bind the parsed directives
118
119
compiler . compile ( el , true )
119
120
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
+
120
126
// extract dependencies for computed properties
121
127
if ( compiler . computed . length ) {
122
128
DepsParser . parse ( compiler . computed )
@@ -247,7 +253,10 @@ CompilerProto.compile = function (node, root) {
247
253
directive = Directive . parse ( 'repeat' , repeatExp , compiler , node )
248
254
if ( directive ) {
249
255
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 )
251
260
}
252
261
253
262
// v-with has 2nd highest priority
@@ -256,7 +265,7 @@ CompilerProto.compile = function (node, root) {
256
265
directive = Directive . parse ( 'with' , withKey || '' , compiler , node )
257
266
if ( directive ) {
258
267
directive . Ctor = componentCtor
259
- compiler . bindDirective ( directive )
268
+ compiler . deferred . push ( directive )
260
269
}
261
270
262
271
} else {
0 commit comments