【发布时间】:2015-05-20 10:59:44
【问题描述】:
我正在编写一个简单的 AngularJS 控制器来跟踪选中的复选框的数量。尽量避免使用$scope.$watch,而是使用ng-change 来增加/减少总计数。
HTML:
<form ng-controller="MainCtrl">
<table>
<tr ng-repeat="item in data">
<td>
<input type="checkbox"
value="{{item.id}}"
ng-model="item.selected"
ng-change="updateTotal($event)"> {{item.name}}
</td>
</tr>
</table>
<p>
Total checked: {{totalSelected}}
</p>
</form>
控制器 sn-p
$scope.updateTotal = function($event) {
var checkbox = $event.target;
if (checkbox.checked) {
$scope.totalSelected++;
}
else {
$scope.totalSelected--;
}
}
我尝试访问$event.target的控制器中不断出现错误:
TypeError: Cannot read property 'target' of undefined
我创建了一个 Plunk 用于重新创建:http://plnkr.co/edit/qPzETejmMHHZCQ2sV2Sk?p=info
如果有人有任何想法或建议,我将不胜感激。
非常感谢!
【问题讨论】:
-
@levi 是正确的。但从哲学上讲,避免在控制器中使用
checkbox.checked(或任何与 DOM 相关的东西)。而是发送item(或item.selected)。 -
@DRobinson 这很有道理,谢谢。您的建议是正确的,不要将它与 DOM 如此紧密地耦合。
-
@levi,如果我们必须停止
ng-change内部的事件传播,我们该如何实现?
标签: javascript angularjs checkbox