我正在AngulrJs中寻找一种方法来创建父指令,并在其中放入另一个指令,如下所示:
<parent-directive>
<child-directive>Hi 1</child-directive>
<child-directive>Hi 2</child-directive>
</parent-directive>
我想要的是parent-directive
能够在处理之前移除其中一个child-directive
我在parent-directive
的compile
函数中使用了angular.element(child[1]).remove()
,但它不起作用,child-directive
在被删除之前仍在处理中。
更新:
这是一篇理解执行顺序的好文章
也许这不能直接回答您的问题,但它可以在编译时删除一个子指令,从而阻止调用其链接方法。使用ng if。。
<parent-directive>
<child-directive ng-if="subdivs.1">Hi 1</child-directive>
<child-directive ng-if="subdivs.2">Hi 2</child-directive>
</parent-directive>
然后在你的上级指令
demo.directive('parent', function($parse) {
return {
restrict: 'E',
link: function (scope, element, attrs) {
scope.subdivs = {1: false, 2: true};
}
}})
这将只显示"Hi 2",并且只调用"Hi"的链接方法。请参阅此处的jsfiddle。
如果您想在AngularJS编译器处理其中一个子函数之前删除它,那么可以使用compile
函数。父级的编译函数保证在子级之前运行,因此它使您有机会在AngularJS编译器之前操作子级的DOM。
app.directive('parent-directive', function() {
return {
restrict: 'E',
compile: function($element) {
$element.children()[1].remove();
}
}
});