$ scope中的奇怪行为。$ watch

时间:2015-09-21 12:20:16

标签: javascript angularjs angularjs-scope

我有以下$scope.watch功能:

$scope.logChecked = []; 
$scope.selectAll = false;
$scope.$watch('selectAll', function(selectAll) {
       console.log($scope.logChecked.length, $scope.logChecked, selectAll);
});

console.log()输出正确枚举$scope.logChecked$scope.logChecked.length显示0

  

0 [pf2n1448:false,cc7a1340:false,cc7a1328:   false,pf2n1424:false,if2n1328:false ...] true

我正在使用以下复选框修改logsChecked:

<td><input type="checkbox" ng-model="logChecked[log.batchId]"/></td>

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

因为logChecked是一个内部没有任何内容的数组(因此length0),但你附加了属性(数组仍然是对象)。

var foo = [];

foo.bar = 'baz';

document.write(foo.length); // 0

document.write(foo.bar); // "baz"

不明显的部分是log.batchId不是数字。因此logChecked[log.batchId]将该值附加为logChecked的属性,但不在数组内。

您的问题可以通过改为logChecked对象({})来解决。要获取该对象中的内容数量,请使用Object.keys($scope.logChecked).length