Angular,在对象中观察特定的键?

时间:2014-10-30 20:57:10

标签: javascript angularjs

我想知道是否可以只查看对象数组中的特定键,而不是

 $scope.$watch('data', function (newValue) {

是否可以做类似

的事情
    $scope.$watch('data.name', function (newValue) {

这将是一个数组,所以如果任何数据[i] .name项改变它会触发所需的功能?

不知道这样的事情是可能的。谢谢你的阅读!

2 个答案:

答案 0 :(得分:3)

您有两个选择:

1)浅看Array$watchCollection),如下所示:

$scope.$watchCollection('data.name', function (newValue) {...});

2)深入监视Array,如下所示:

$scope.$watch('data.name', function (newValue) {...}, true);

使用选项1,只有在添加/删除元素时才会触发$watch函数,但如果要对其中一个Array元素进行更改则不会触发。

另一方面,对于选项2,$watch函数将在每次有任何更改时运行。

答案 1 :(得分:2)

以下是您http://blogs.microsoft.co.il/choroshin/2014/03/26/angularjs-watch-for-changes-in-specific-object-property/尝试做的一个示例。

var app=angular.module('App', []);
function ctrl($scope){
$scope.count=0;
$scope.people = [{id:1,name: "bill"}, {id:2,name: "jim"}, {id:3,name: "ryan"}]

$scope.$watch(function($scope) {
  return $scope.people.
      map(function(obj) {
        return obj.name
      });
}, function (newVal) {
    $scope.count++;
    $scope.msg = 'person name was changed'+ $scope.count;
}, true);
}

这可以通过返回obj.name。

的map函数看到每个对象上的name属性