假设你有一个像
这样的模板<a ng-show=function()>a link</a>
我的问题是:函数何时运行?如何判断角度是否需要重新运行该功能?
答案 0 :(得分:2)
嗯,ng-show采用布尔值,因此使用它的最佳选择是在设置ng-show的逻辑中的某个地方调用你的函数。
$scope.show = false;
$scope.showSomething = function(myCondition){
if(myCondition){
myFunction();
$scope.show = true;
}
};
&#13;
<div ng-show='show'></div>
&#13;
答案 1 :(得分:1)
ng-show
中的任何表达式都在每个摘要周期进行评估,因此该函数也会在每个摘要周期运行。因此,对函数返回的值的任何更改都将反映在视图中。如果您的函数对触发新摘要周期的应用程序状态进行任何更改,您可能会遇到无限的摘要循环(这并不是很好)。
因此,请注意在ng-show
等指令中使用函数。如果功能是纯粹的(它没有任何副作用),你应该安全使用它。
Here's a plunker that shows the function being called on every digest. (注意:在plunker示例中,单击按钮实际上会触发两个摘要周期,因为click事件会触发一个,并且切换$ scope变量会触发另一个。)
答案 2 :(得分:0)
ng-show="booleanVar"
采用条件或布尔值。您可以更改条件表达式的值以隐藏并在运行时显示值。
但是如果你想在触发ng-show时调用某个函数,那么你可以在模型中使用$watch
。
<div ng-app="myApp" ng-controller="myCtrl" ng-init="isDisplayed = true">
<div ng-show="isDisplayed">something</div>
<button ng-click="isDisplayed = !isDisplayed">Toggle</button>
</div>
var myApp = angular.module('myApp', [])
.controller('myCtrl', function($scope, $log) {
$scope.$watch('isDisplayed', function(newValue, oldValue) {
if (newValue !== oldValue) {
$log.log('Changed!');
}
});
});
查看详情here