首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制绑定到函数的属性刷新

如何强制绑定到函数的属性刷新
EN

Stack Overflow用户
提问于 2016-02-09 23:41:33
回答 2查看 57关注 0票数 1

当一个角度属性被绑定到一个控制器/作用域的属性时,它会在该属性发生变化时自动更新。如何让绑定到控制器/作用域的方法的属性进行更改?

例如,假设我有:

代码语言:javascript
复制
<input type="checkbox" ng-checked="vm.isInSet(vm.results.selectedRoles, role.id)"/>

vm.results发生变化时,我希望更新ng-checked,即应该再次调用vm.isInSet。或者,如果我需要调用某种显式方法来刷新页面上的所有元素,也可以。我尝试了$scope.$apply(),但得到了"$digest已在进行中“的错误,所以摘要周期已经开始了。

EN

回答 2

Stack Overflow用户

发布于 2016-02-10 00:01:39

$watch帮助侦听$scope更改

这就是如何创建您自己的手表。当附加到$scope的一些值发生更改时,$watch服务可以帮助您运行一些代码。它很少使用,但有时是有帮助的。例如,如果您想在每次'myVar‘更改时运行一些代码,您可以执行以下操作:

代码语言:javascript
复制
function MyController($scope) {

    $scope.myVar = 1;

    $scope.$watch('myVar', function() {
        alert('hey, myVar has changed!');
    });

    $scope.buttonClicked = function() {
        $scope.myVar = 2; // This will trigger $watch expression to kick in
    };
}
票数 1
EN

Stack Overflow用户

发布于 2016-02-10 00:08:40

$apply / $digest未运行vm.isInSet函数,用户操作...

因为ng-checked是一个布尔验证器,所以您可以将逻辑从html移动到anguler指令/控制器,即:

代码语言:javascript
复制
<input type="checkbox" ng-checked="vm.states"/>

$scope.$watch('vm.results',function(newVal){
   vm.state = vm.isInSet(...);
});

如果您有多个复选框,则可以使用数组:

代码语言:javascript
复制
<input type="checkbox" ng-checked="vm.states[role.id]"/>

$scope.$watch('vm.results',function(newVal){
   vm.state[..] = vm.isInSet(...);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35296116

复制
相关文章

相似问题

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