@@ -2424,13 +2424,12 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
2424
2424
}
2425
2425
}
2426
2426
2427
- // Initialize controllers
2427
+ // Initialize bindToController bindings
2428
2428
for ( var name in elementControllers ) {
2429
2429
var controllerDirective = controllerDirectives [ name ] ;
2430
2430
var controller = elementControllers [ name ] ;
2431
2431
var bindings = controllerDirective . $$bindings . bindToController ;
2432
2432
2433
- // Initialize bindToController bindings
2434
2433
if ( controller . identifier && bindings ) {
2435
2434
controller . bindingInfo =
2436
2435
initializeDirectiveBindings ( controllerScope , attrs , controller . instance , bindings , controllerDirective ) ;
@@ -2443,14 +2442,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
2443
2442
// If the controller constructor has a return value, overwrite the instance
2444
2443
// from setupControllers
2445
2444
controller . instance = controllerResult ;
2445
+ $element . data ( '$' + controllerDirective . name + 'Controller' , controllerResult ) ;
2446
2446
controller . bindingInfo . removeWatches && controller . bindingInfo . removeWatches ( ) ;
2447
2447
controller . bindingInfo =
2448
2448
initializeDirectiveBindings ( controllerScope , attrs , controller . instance , bindings , controllerDirective ) ;
2449
2449
}
2450
-
2451
- // Store controllers on the $element data
2452
- // For transclude comment nodes this will be a noop and will be done at transclusion time
2453
- $element . data ( '$' + controllerDirective . name + 'Controller' , controllerResult ) ;
2454
2450
}
2455
2451
2456
2452
// Bind the required controllers to the controller, if `require` is an object and `bindToController` is truthy
@@ -2617,7 +2613,14 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
2617
2613
controller = attrs [ directive . name ] ;
2618
2614
}
2619
2615
2620
- elementControllers [ directive . name ] = $controller ( controller , locals , true , directive . controllerAs ) ;
2616
+ var controllerInstance = $controller ( controller , locals , true , directive . controllerAs ) ;
2617
+
2618
+ // For directives with element transclusion the element is a comment.
2619
+ // In this case .data will not attach any data.
2620
+ // Instead, we save the controllers for the element in a local hash and attach to .data
2621
+ // later, once we have the actual element.
2622
+ elementControllers [ directive . name ] = controllerInstance ;
2623
+ $element . data ( '$' + directive . name + 'Controller' , controllerInstance . instance ) ;
2621
2624
}
2622
2625
return elementControllers ;
2623
2626
}
0 commit comments