当ng-model中的变化时,方法会触发

时间:2015-08-13 10:37:19

标签: javascript angularjs

我制作了一个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()"所以为什么要开火?

1 个答案:

答案 0 :(得分:5)

您在Angular expression - {{getDoneNum()}}中使用此功能 - 在模板中,在此处:

<h3>Done item number: {{getDoneNum()}}</h3>

每当触发摘要循环时都会调用此函数。它很容易检查:只需调试它(放置一个断点等)并检查调用堆栈。您将看到以下图片:

- $scope.getDoneNum
- Parser.functionCall
- $get.fn
- $get.Scope.$digest
- $get.Scope.$apply
...