Angularjs ng-if函数被多次调用

时间:2016-07-05 13:11:29

标签: javascript jquery angularjs

我在ng-if中调用控制器函数,如下所示,但是反复调用checkUserExamEnrollment函数。任何人都可以在代码中提出错误的建议吗?

查看:

<div ng-if="checkUserExamEnrollment()== 0">Sample Data here if ng-if true</div>

控制器:

$scope.checkUserExamEnrollment = function()
    {
        var url = "http://localhost/api/examnew";

        return $http.get(url);
    }

2 个答案:

答案 0 :(得分:5)

每个摘要循环都会调用ng-if。问题是它包含一个涉及函数调用的表达式。 Angular无法知道表达式的结果何时可能发生变化,因此每次都会调用它。

$digest周期运行时,将执行观察者以查看范围模型是否已更改。如果有,则调用相应的侦听器函数。这导致了一个重要的问题。如果监听器功能本身改变了范围模型怎么办? AngularJS将如何解释这一变化?

答案是$digest循环不会只运行一次。在当前循环结束时,它会重新开始检查是否有任何模型已更改。这基本上是脏检查,用于解释可能由侦听器函数执行的任何模型更改。因此,$ digest循环保持循环,直到没有更多模型更改,或者它达到最大循环计数10。

答案 1 :(得分:0)

如果您的http调用返回一个对象或数组,那么您可以将它存储在Scope变量中(例如:$ scope.result)并使用:

    <div ng-if="result">Sample Data here if ng-if true</div>

这将检查$ scope.result的内容,并仅在它不为空时显示它。

希望这有帮助