4

每当我在其自身中使用指令时,页面就会冻结,并占用越来越多的 CPU 和 RAM,直到选项卡挂起。

我有的是这个

Application.Directives.directive('somed', function() {
    return {
        restrict: 'E',
        // Load the template from a separate HTML file
        templateUrl: 'directives/somed/view.html',
        replace: true
    };
});

和模板之类的

<div ng-if="nonexistent">
    <somed></somed>
</div>

永远不应该加载嵌套指令(ng-if 评估为 false,因此不显示任何内容。如果我放置 div 标签而不是 somed,则可以确认这一点)。然而,浏览器挂在它上面。

怎么会,我该如何预防?

4

2 回答 2

1

文档ng-if说:

此外,ngIf使用它们的编译状态重新创建元素。

并且由于somed引用模板somed,它将无法成功编译。这将解释问题。

有几种方法可以防止它,这取决于您的需要。

  1. 您可以包括templateusing anng-include并将模板放入您的$templateCache.
  2. 您可以html在函数中动态设置调用此指令的元素,link然后使用$compile服务来解释其中的(可能是递归的)指令。
于 2013-10-25T14:39:59.093 回答
-2

就像这样做:

var iAmAlwaysTrue = true;

function test(){
    if(iAmAlwaysTrue)
        test();
} // end test

test();

就像我在评论中所说的那样,它并没有破坏 AngularJS,它只是糟糕的编码。如果我在 C++ 中这样做,是破坏 C++ 还是只是糟糕的代码?

编辑:如果您试图证明存在递归情况,AngularJS 会在指令自己的模板中识别指令,那么我猜您根据实验的结果成功了,但我猜可能是测试鉴于 Angular 自己的指令ng-?在指令的模板中被解释得很好,因此避免了 - 没有理由你创建的指令也不会。

于 2013-10-25T14:26:52.337 回答