Немного поэкспериментировав с включением, я хотел посмотреть, сможет ли включенная директива, для которой требуется определенный контроллер родительской директивы, найти ее после включения под требуемым родителем. Директивы, которые я использовал, следующие: Существует директива ParentOfParent, которая имеет значение transclude:true. Существует директива Parent, которая встроена в шаблон директивы ParentOfParent. Существует директива 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, все работает.
Возможно ли, чтобы включенная директива нашла требуемый контроллер после вставки ниже директивы, которой принадлежит контроллер?
require: "parent"
выдает ошибку. Хотя в чем вопрос? Очевидно, что это возможно, как вы упомянули - поместите элемент вcloneAttachFn
, что происходит до связывания - person New Dev   schedule 31.07.2015cloneFn
— это возможность разместить клонированное содержимое в DOM до того, как оно будет слинковано, чтобы такие вещи, какrequire
, работали корректно. - person New Dev   schedule 02.08.2015