Я пишу простой контроллер 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>
контроллер фрагмент кода
$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
@DRobinson Это имеет смысл, спасибо. Вы правы с вашим предложением не связывать его так тесно с DOM. –
@levi, если нам нужно остановить распространение событий внутри 'ng-change', как мы можем достичь этого? – Mak