我正在寻找AngulrJs创建父指令的方法,并在其中添加另一个指令:
<parent-directive>
<child-directive>Hi 1</child-directive>
<child-directive>Hi 2</child-directive>
</parent-directive>
我希望parent-directive
能够在此处理之前删除其中一个child-directive
。
我在angular.element(child[1]).remove()
的{{1}}函数中使用了compile
,但它不起作用,parent-directive
在删除之前仍然处理完毕。
更新
This is a good article了解执行顺序
答案 0 :(得分:2)
也许这不能直接回答你的问题,但它能够在编译时删除子指令,防止其链接方法被调用。使用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};
}
}})
这只会显示&#39; Hi 2&#39;并且只会调用&#39; Hi 2&#39;的链接方法。请参阅jsfiddle here。
答案 1 :(得分:1)
如果要在AngularJS编译器处理它之前删除其中一个子节点,那么执行它的地方就是compile
函数。父项的编译函数保证在子项之前运行,因此它使您有机会在AngularJS编译器之前操作子项的DOM。
app.directive('parent-directive', function() {
return {
restrict: 'E',
compile: function($element) {
$element.children()[1].remove();
}
}
});