有没有办法在A甚至处理之前通过指令B删除指令A?

时间:2016-01-07 07:36:31

标签: angularjs angularjs-directive

我正在寻找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了解执行顺序

2 个答案:

答案 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();
        }
    }
});