Sto scrivendo un semplice controller AngularJS che tiene traccia del numero di checkbox selezionate. Cercando di evitare $scope.$watch
e utilizzare invece ng-change
per incrementare/decrementare il conteggio totale.
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>
controller frammento
$scope.updateTotal = function($event) {
var checkbox = $event.target;
if (checkbox.checked) {
$scope.totalSelected++;
}
else {
$scope.totalSelected--;
}
}
Continuo a ricevere un errore nel controller in cui tento di accedere $event.target
:
TypeError: Cannot read property 'target' of undefined
Ho creato un Plunk per ricreare: http://plnkr.co/edit/qPzETejmMHHZCQ2sV2Sk?p=info
Se qualcuno ha qualche idea o suggerimento sarei molto grato.
Grazie mille!
@levi sia corretto. Ma più filosoficamente, evita "checkbox.checked" (o qualcosa di simile al DOM) nel controller. Invece manda il 'item' (o' item.selected'). – DRobinson
@DRobinson Ha senso, grazie. Hai ragione con il tuo suggerimento di non accoppiarlo così strettamente al DOM. –
@levi, se dobbiamo interrompere la propagazione dell'evento all'interno di 'ng-change', come possiamo ottenerlo? – Mak