Angularjs &引用;“有针对性”;安格拉斯的深度观察

Angularjs &引用;“有针对性”;安格拉斯的深度观察,angularjs,Angularjs,假设我有这样一个对象数组: $scope.data = [ { "active": true, "id": "4bcb19db-ec10-4de5-8ae6-b13388494651", "name": "Owais Shah", "username": "chekhov" }, { "active": false, "id": "630d0582-1bf9-4331-9fa6-f6baa59319b2", "name": "T

假设我有这样一个对象数组:

$scope.data = [
  {
    "active": true,
    "id": "4bcb19db-ec10-4de5-8ae6-b13388494651",
    "name": "Owais Shah",
    "username": "chekhov"
  },
  {
    "active": false,
    "id": "630d0582-1bf9-4331-9fa6-f6baa59319b2",
    "name": "Tim Hunt",
    "username": "one"
  }
]
for(var i=0,j=$scope.data.length;i<j;i++) {
   $scope.$watch(data[i].active, function() {   });

}
我可以用它来深入观察物体:

$scope.$watch('data', function(){...}, true)
但是,在我的例子中,这是无效的,因为我感兴趣的这些对象的唯一属性是
活动的


有没有办法只观察对象内部的特定属性?类似于
$scope.$watch('data[].active'…)
我认为您可以这样做:

$scope.data = [
  {
    "active": true,
    "id": "4bcb19db-ec10-4de5-8ae6-b13388494651",
    "name": "Owais Shah",
    "username": "chekhov"
  },
  {
    "active": false,
    "id": "630d0582-1bf9-4331-9fa6-f6baa59319b2",
    "name": "Tim Hunt",
    "username": "one"
  }
]
for(var i=0,j=$scope.data.length;i<j;i++) {
   $scope.$watch(data[i].active, function() {   });

}

for(var i=0,j=$scope.data.length;i

$scope.$watch(    function() { 
                     return $scope.data.active[0]; 
                  }, 
                  function(newValue, oldValue) { 
                     console.log('It changed!'); 
                  }
              );

您可以利用$watch函数接受函数并返回从数组中计算的值。例如,您可以看到它是一个基于二进制序列0/1的数字,表示active=false或true。类似这样的操作可以:

$scope.$watch(function() {
        var value = 0, idx;
        for (idx = 0; idx < $scope.data.length; idx += 1) {
            value *= 2;
            value += $scope.data[idx].active ? 1 : 0;
        };
        return value;
    }, function() { 
        $scope.changes += 1;
        $scope.status = "Changed " + $scope.changes + " times."; });
$scope.$watch(函数(){
var值=0,idx;
对于(idx=0;idx<$scope.data.length;idx+=1){
数值*=2;
value+=$scope.data[idx]。活动?1:0;
};
返回值;
},函数(){
$scope.changes+=1;
$scope.status=“Changed”+$scope.changes+“times.”;});
这里的jsFiddle说明了这一点:


单击同一按钮可以看到它的图示。元素第一次从true更改为false或从false更改为true时,更改被注册,而后续更新不会触发监视。如果使用下划线映射函数将数组投影到要监视的数字或值上,则更易于读取。

will$scope.data.active在这种情况下真的会返回任何东西吗?我不相信在数组中只能查看对象内部的某些参数。您可以查看变量的引用或值,如果数组中有一百万个元素,那么可以使用一百万个手表来降低应用程序的速度。如果有mi,那么只有10个是什么我想问他们为什么要看所有的电影,但这不是我的决定。