我制作了一个JSFiddle here,我想知道为什么更改任何项目的完成复选框 getDoneNum
函数会触发?
HTML:
<h3>Done items number: {{getDoneNum()}}</h3>
..
..
<tr ng-repeat="item in items">
<td>{{item.name}}</td>
<td><input type="checkbox" ng-model="item.done"></td>
</tr>
JavaScript的:
$scope.getDoneNum = function () {
return $scope.items.filter(function(item){
return item.done;
}).length;
};
$scope.items = [
{
name: 'Tony',
done: false
},
{
name: 'Emo',
done: true
}
];
我没有使用ng-change="getDoneNum()"
所以为什么要开火?
答案 0 :(得分:5)
您在Angular expression - {{getDoneNum()}}
中使用此功能 - 在模板中,在此处:
<h3>Done item number: {{getDoneNum()}}</h3>
每当触发摘要循环时都会调用此函数。它很容易检查:只需调试它(放置一个断点等)并检查调用堆栈。您将看到以下图片:
- $scope.getDoneNum
- Parser.functionCall
- $get.fn
- $get.Scope.$digest
- $get.Scope.$apply
...