トランスクルージョンを少し試しながら、特定の親ディレクティブ コントローラーを必要とするトランスクルージョンされたディレクティブが、必要な親の下でトランスクルージョンされた後にそれを見つけることができるかどうかを確認したかったのです。私が使用したディレクティブは次のとおりです。 Transclude:true を持つ ParentOfParent ディレクティブがあります。ParentOfParent ディレクティブ テンプレートに組み込まれているディレクティブ Parent があります。Parent コントローラを必要とする Child ディレクティブがあり、ParentOfParent によって Parent ディレクティブの子としてトランスクルードされています。
'use strict';
angular
.module('angularlabApp', [
'ngRoute',
])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'main.html',
controller: 'MainCtrl'
})
.otherwise({
redirectTo: '/'
});
});
'use strict';
angular.module('angularlabApp')
.directive('parent', function () {
return {
controller: function () { },
restrict: 'EA',
link: function postLink(scope, element, attrs) {
console.log('Parent Link');
}
};
});
'use strict';
angular.module('angularlabApp')
.directive('parentOfParent', function () {
return {
template: '<div id="prnt" parent></div>',
transclude: true,
restrict: 'EA',
link: function(scope, element, attrs,_,transcludeFn){
console.log('POP Link');
element.find('#prnt').append(transcludeFn());
}
};
});
'use strict';
angular.module('angularlabApp')
.directive('child', function () {
return {
template: '<div></div>',
restrict: 'EA',
require:'^parent',
link: function postLink(scope, element, attrs) {
console.log('Child Link');
}
};
});
'use strict';
angular.module('angularlabApp')
.controller('MainCtrl', function ($scope) {
});
私が遭遇したのは、クローン作成ありとなしのトランスクルージョン機能の使用の間に奇妙な不一致があったことです。トランスクルージョン関数の出力を (cloneFn を渡さずに) 使用している場合、子ディレクティブがその上の親コントローラーを見つけられないというエラーが発生します。 http://plnkr.co/edit/JteQpPMc6nbVNjRDHVZ2
ただし、cloneFn を渡して使用すると、すべてが機能します。
コントローラーが属するディレクティブの下に挿入された後、transcluded ディレクティブが必要なコントローラーを見つけることさえ可能ですか?