首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular: ng-show和函数

Angular: ng-show和函数
EN

Stack Overflow用户
提问于 2017-03-25 03:21:24
回答 3查看 7.3K关注 0票数 7

假设你有一个模板,比如

代码语言:javascript
复制
<a ng-show=function()>a link</a>

我的问题是:函数什么时候运行?我如何告诉angular是时候重新运行函数了?

EN

回答 3

Stack Overflow用户

发布于 2017-03-25 03:31:17

好的,ng-show接受一个布尔值,所以使用它的最佳选择是在设置ng-show的逻辑中调用您的函数。

代码语言:javascript
复制
$scope.show = false;

$scope.showSomething = function(myCondition){
    if(myCondition){
        myFunction();
        $scope.show = true;
    }
};
代码语言:javascript
复制
<div ng-show='show'></div>

票数 3
EN

Stack Overflow用户

发布于 2017-03-25 03:47:21

ng-show中的任何表达式都会在每个摘要周期中求值,因此该函数也会在每个摘要周期中运行。因此,对函数返回值的任何更改都将反映在视图中。如果您的函数对应用程序状态进行了任何更改,从而触发了一个新的摘要周期,那么您可能会遇到无限摘要循环(这不是很好)。

因此,在像ng-show这样的指令中使用函数时要小心。如果函数是纯函数(它没有任何副作用),那么使用它应该是安全的。

Here's a plunker that shows the function being called on every digest. (注意:在柱塞器示例中,单击按钮实际上会触发两个摘要周期,因为单击事件会触发一个摘要周期,而切换$scope变量则会触发另一个摘要周期。)

票数 1
EN

Stack Overflow用户

发布于 2017-03-25 03:47:06

ng-show="booleanVar"接受条件或布尔值。您可以更改条件表达式的值,以在运行时隐藏和显示值。

但是如果你想在ng-show被触发时调用一些函数,那么你可以在你的模型中使用$watch

代码语言:javascript
复制
<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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43007568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档