Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS$scope.$监视对象的属性_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS$scope.$监视对象的属性

Javascript AngularJS$scope.$监视对象的属性,javascript,angularjs,Javascript,Angularjs,我试图观察$scope上的一个简单对象,但我不明白为什么下面的语句总是输出state:{value}用于country和state select元素 angular.module('app').controller('FiltersCtrl', ['$scope', 'filterRepo', function ($scope, filterRepo) { $scope.data = { lookups: { countries: [

我试图观察$scope上的一个简单对象,但我不明白为什么下面的语句总是输出state:{value}用于country和state select元素

angular.module('app').controller('FiltersCtrl', ['$scope', 'filterRepo', function ($scope, filterRepo) {

    $scope.data = {
        lookups: {
            countries: [
                { id: 1, name: 'USA' },
                { id: 2, name: 'Canada' },
                { id: 3, name: 'Mexico' }
            ],
            states: [
                { id: 1, name: 'Oregon' },
                { id: 2, name: 'Texas' },
                { id: 3, name: 'Iowa' }
            ]
        }
    };

    $scope.query = {
        filter: {
            country: 1,
            state: 1
        }
    };

    for (var item in $scope.query.filter) {
        $scope.$watch('query.filter.' + item, function (newValue, oldValue) {
            if (newValue !== oldValue) {
                console.log(item + ' : ' + newValue);
            }
        }, false);
    }

}]);
要扩展上面的from@still\u学习,只有函数具有作用域,这意味着对$watch语句的回调使用的是您在parent函数中声明的item变量。但是,在调用/调用这些$watch回调时,for循环已经更新了它们的值。这里面有一条

一个很好的答案是通过使用函数闭包的功能。两个缺点:

仅适用于阵列 仅在最新的浏览器中 Angular提供了一种非常方便的方法来解决中的这两个问题


所有这些听起来可能很粗糙:但看看它在fiddle中的作用:

您不能在$watch回调中安全地使用item,因为当回调运行时,它的值将更改为最后一个可能的键状态。fiddle-ized@still\u learning那么如何获取对已更改对象的引用?@Sam use angular.forEach