我在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);
}
答案 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的内容,并仅在它不为空时显示它。
希望这有帮助