javascript - Odd behavior in $scope.$watch -
i have following $scope.watch
function:
$scope.logchecked = []; $scope.selectall = false; $scope.$watch('selectall', function(selectall) { console.log($scope.logchecked.length, $scope.logchecked, selectall); });
the console.log()
output correctly enumerates $scope.logchecked
while $scope.logchecked.length
shows 0
0 [pf2n1448: false, cc7a1340: false, cc7a1328: false, pf2n1424: false, if2n1328: false…] true
i modifying logschecked following checkbox:
<td><input type="checkbox" ng-model="logchecked[log.batchid]"/></td>
what's going on here?
because logchecked
array nothing inside (hence length
0
), attached properties (arrays still objects).
var foo = []; foo.bar = 'baz'; document.write(foo.length); // 0 document.write(foo.bar); // "baz"
the part isn't obvious log.batchid
isn't numeric. logchecked[log.batchid]
attaches value property of logchecked
, not inside array.
your problem solved making logchecked
object ({}
) instead. number of things in object, use object.keys($scope.logchecked).length
Comments
Post a Comment