Angular:ng-show和函数

时间:2017-03-24 19:21:24

标签: angularjs

假设你有一个像

这样的模板
<a ng-show=function()>a link</a>

我的问题是:函数何时运行?如何判断角度是否需要重新运行该功能?

3 个答案:

答案 0 :(得分:2)

嗯,ng-show采用布尔值,因此使用它的最佳选择是在设置ng-show的逻辑中的某个地方调用你的函数。

&#13;
&#13;
$scope.show = false;

$scope.showSomething = function(myCondition){
    if(myCondition){
        myFunction();
        $scope.show = true;
    }
};
&#13;
<div ng-show='show'></div>
&#13;
&#13;
&#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