我有以下$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>
这里发生了什么?
答案 0 :(得分:1)
因为logChecked
是一个内部没有任何内容的数组(因此length
是0
),但你附加了属性(数组仍然是对象)。
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