@@ -167,6 +167,7 @@ function $CompileProvider($provide) {
167167 return function publicLinkFn ( scope , cloneAttachFn , options ) {
168168 options = options || { } ;
169169 var parentBoundTranscludeFn = options . parentBoundTranscludeFn ;
170+ var transcludeControllers = options . transcludeControllers ;
170171 if ( parentBoundTranscludeFn && parentBoundTranscludeFn . $$boundTransclude ) {
171172 parentBoundTranscludeFn = parentBoundTranscludeFn . $$boundTransclude ;
172173 }
@@ -177,6 +178,9 @@ function $CompileProvider($provide) {
177178 } else {
178179 $linkNodes = $compileNodes ;
179180 }
181+ _ . forEach ( transcludeControllers , function ( controller , name ) {
182+ $linkNodes . data ( '$' + name + 'Controller' , controller . instance ) ;
183+ } ) ;
180184 $linkNodes . data ( '$scope' , scope ) ;
181185 compositeLinkFn ( scope , $linkNodes , parentBoundTranscludeFn ) ;
182186 return $linkNodes ;
@@ -229,11 +233,13 @@ function $CompileProvider($provide) {
229233
230234 var boundTranscludeFn ;
231235 if ( linkFn . nodeLinkFn . transcludeOnThisElement ) {
232- boundTranscludeFn = function ( transcludedScope , cloneAttachFn , containingScope ) {
236+ boundTranscludeFn = function ( transcludedScope , cloneAttachFn , transcludeControllers , containingScope ) {
233237 if ( ! transcludedScope ) {
234238 transcludedScope = scope . $new ( false , containingScope ) ;
235239 }
236- return linkFn . nodeLinkFn . transclude ( transcludedScope , cloneAttachFn ) ;
240+ return linkFn . nodeLinkFn . transclude ( transcludedScope , cloneAttachFn , {
241+ transcludeControllers : transcludeControllers
242+ } ) ;
237243 } ;
238244 } else if ( parentBoundTranscludeFn ) {
239245 boundTranscludeFn = parentBoundTranscludeFn ;
@@ -403,6 +409,7 @@ function $CompileProvider($provide) {
403409 var controllerDirectives = previousCompileContext . controllerDirectives ;
404410 var childTranscludeFn ;
405411 var hasTranscludeDirective = previousCompileContext . hasTranscludeDirective ;
412+ var hasElementTranscludeDirective ;
406413
407414 function getControllers ( require , $element ) {
408415 if ( _ . isArray ( require ) ) {
@@ -490,6 +497,7 @@ function $CompileProvider($provide) {
490497 }
491498 hasTranscludeDirective = true ;
492499 if ( directive . transclude === 'element' ) {
500+ hasElementTranscludeDirective = true ;
493501 var $originalCompileNode = $compileNode ;
494502 $compileNode = attrs . $$element = $ ( document . createComment ( ' ' + directive . name + ': ' + attrs [ directive . name ] + ' ' ) ) ;
495503 $originalCompileNode . replaceWith ( $compileNode ) ;
@@ -631,11 +639,15 @@ function $CompileProvider($provide) {
631639 } ) ;
632640
633641 function scopeBoundTranscludeFn ( transcludedScope , cloneAttachFn ) {
642+ var transcludeControllers ;
634643 if ( ! transcludedScope || ! transcludedScope . $watch || ! transcludedScope . $evalAsync ) {
635644 cloneAttachFn = transcludedScope ;
636645 transcludedScope = undefined ;
637646 }
638- return boundTranscludeFn ( transcludedScope , cloneAttachFn , scope ) ;
647+ if ( hasElementTranscludeDirective ) {
648+ transcludeControllers = controllers ;
649+ }
650+ return boundTranscludeFn ( transcludedScope , cloneAttachFn , transcludeControllers , scope ) ;
639651 }
640652 scopeBoundTranscludeFn . $$boundTransclude = boundTranscludeFn ;
641653
0 commit comments