javascript - Angular JS - 范围观察不更新

标签 javascript angularjs angularjs-scope

我可能用错了,但我有一个监视变量的函数,当该变量从 View 中更改时,该函数运行..但是当同级函数更改该变量时,监视不会运行。我是不是编码有误?

scope.$watch (settings.number, function(val){
    alert('test');
})
scope.exampleObj = {
    exampleFunc : function(){
        settings.number += 5;
    }
};

所以当我调用 scope.exampleObj.exampleFunc(); scope watch 不应该被调用吗?

最佳答案

将字符串替换为函数或使用 $watchCollection,如下所示:

使用变量:

angular.module('TestApp', [])
    .controller('MainCtrl', function($scope){
        // Object
        var settings = {
            number: 1,
            foobar: 'Hello World'
        };

        $scope.$watch(function(){ return settings.number; }, function(newValue, oldValue){
            console.log('New value detected in settins.number');
        });

        $scope.$watchCollection(function(){ return settings; }, function(newValue, oldValue){
            console.log('New value detected in settings');
        });
    });

使用 $scope:

angular.module('TestApp', [])
    .controller('MainCtrl', function($scope){
        // Object
        $scope.settings = {
            number: 1,
            foobar: 'Hello World'
        };

        $scope.$watch('settings.number', function(newValue, oldValue){
            console.log('New value detected in $scope.settings.number');
        });
    });

示例:http://jsfiddle.net/Chofoteddy/2SNFG/

*注意:$watchCollection 在 AngularJS 1.1.x 及以上版本中可用。如果您需要观察数组中的多个值或对象中的多个属性,它会非常有用。

关于javascript - Angular JS - 范围观察不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23231392/

相关文章:

Javascript:如何保持持久数组数据

javascript - Facebook 如何在不重新加载页面或不使用# 或的情况下更改浏览器地址栏中的 URL?

javascript - AngularJS - 函数未从服务实例化

asp.net-mvc - 获取具有 # 的返回 URL 查询字符串值

javascript - ajax请求后显示页面

javascript - 动画左不能在页面滚动上工作

javascript - 单元测试 View - 最佳实践

javascript - AngularJS:同时更新 $scope 中的所有对象

javascript - 将对象数组添加到 Angular 范围对象中 -- TypeError

angularjs - 高效的 AngularJS 状态管理和持久化