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个是什么我想问他们为什么要看所有的电影,但这不是我的决定。