有没有一种方法可以在a被处理之前通过指令B删除指令a



我正在AngulrJs中寻找一种方法来创建父指令,并在其中放入另一个指令,如下所示:

<parent-directive>
    <child-directive>Hi 1</child-directive>
    <child-directive>Hi 2</child-directive>
</parent-directive>

我想要的是parent-directive能够在处理之前移除其中一个child-directive
我在parent-directivecompile函数中使用了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();
        }
    }
});

最新更新