【发布时间】:2015-10-19 19:59:43
【问题描述】:
我有一个包含有分数的人的数组。我显示带有分数的人员列表和一个复选框。当用户选中复选框时,我会将所有选中的分数加起来。: http://jsfiddle.net/edwardtanguay/hwutbgv3/16
但是,总数落后了一个检查,因为当 Angular 执行 ng-click 中包含的函数时,它似乎没有更新 ng-model 的值。
如何让 Angular 先更新值,然后执行函数?
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="person in persons | orderBy:'score'"><input type="checkbox" ng-model="person.isChecked" ng-click="updateTotals()"/> {{person.name}} = {{person.score}} ({{person.isChecked}})
</li>
</ul>
<div>{{message}}</div>
<div>total score of checked persons: {{total}}</div>
</div>
var myApp = angular.module('myApp',[]);
function MyCtrl($scope, $window) {
$scope.debug = '';
$scope.total = 0;
$scope.persons = [
{score: 1, name: 'Jim', isChecked: true},
{score: 2, name: 'Joe', isChecked: false},
{score: 3, name: 'Angie', isChecked: true}
];
$scope.updateTotals = function() {
$scope.total = 0;
for(var x=0; x < $scope.persons.length; x++) {
var person = $scope.persons[x];
if(person['isChecked']) {
$scope.total += person['score'];
}
}
}
$scope.updateTotals()
}
【问题讨论】:
-
我认为你可以使用 ng-change 而不是 ng-click。