@@ -2437,13 +2437,12 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
2437
2437
}
2438
2438
}
2439
2439
2440
- // Initialize controllers
2440
+ // Initialize bindToController bindings
2441
2441
for ( var name in elementControllers ) {
2442
2442
var controllerDirective = controllerDirectives [ name ] ;
2443
2443
var controller = elementControllers [ name ] ;
2444
2444
var bindings = controllerDirective . $$bindings . bindToController ;
2445
2445
2446
- // Initialize bindToController bindings
2447
2446
if ( controller . identifier && bindings ) {
2448
2447
controller . bindingInfo =
2449
2448
initializeDirectiveBindings ( controllerScope , attrs , controller . instance , bindings , controllerDirective ) ;
@@ -2456,14 +2455,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
2456
2455
// If the controller constructor has a return value, overwrite the instance
2457
2456
// from setupControllers
2458
2457
controller . instance = controllerResult ;
2458
+ $element . data ( '$' + controllerDirective . name + 'Controller' , controllerResult ) ;
2459
2459
controller . bindingInfo . removeWatches && controller . bindingInfo . removeWatches ( ) ;
2460
2460
controller . bindingInfo =
2461
2461
initializeDirectiveBindings ( controllerScope , attrs , controller . instance , bindings , controllerDirective ) ;
2462
2462
}
2463
-
2464
- // Store controllers on the $element data
2465
- // For transclude comment nodes this will be a noop and will be done at transclusion time
2466
- $element . data ( '$' + controllerDirective . name + 'Controller' , controllerResult ) ;
2467
2463
}
2468
2464
2469
2465
// Bind the required controllers to the controller, if `require` is an object and `bindToController` is truthy
@@ -2630,7 +2626,14 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
2630
2626
controller = attrs [ directive . name ] ;
2631
2627
}
2632
2628
2633
- elementControllers [ directive . name ] = $controller ( controller , locals , true , directive . controllerAs ) ;
2629
+ var controllerInstance = $controller ( controller , locals , true , directive . controllerAs ) ;
2630
+
2631
+ // For directives with element transclusion the element is a comment.
2632
+ // In this case .data will not attach any data.
2633
+ // Instead, we save the controllers for the element in a local hash and attach to .data
2634
+ // later, once we have the actual element.
2635
+ elementControllers [ directive . name ] = controllerInstance ;
2636
+ $element . data ( '$' + directive . name + 'Controller' , controllerInstance . instance ) ;
2634
2637
}
2635
2638
return elementControllers ;
2636
2639
}
0 commit comments