Skip to content Skip to sidebar Skip to footer

Angularjs Checkbox Ng-change Issue With $event.target

I'm writing a simple AngularJS Controller that keeps track of the number of checkboxes checked. Trying to avoid $scope.$watch and instead use ng-change to increment/decrement the

Solution 1:

ng-change function doesn't allow to pass $event as variable.

From an collaborator in AngularJS official github repo:

ng-change is not a directive for handling the change event (I realize that this is confusing given the name), but is actually instead notified when ngModelController.$setViewValue() is called and the value changes (because ng-change adds a listener to the $viewChangeListeners collection). So this is as expected.

You can read more about it ng-change doesn't get the $event argument

How can you solve your requirement?

Just pass item.selected to your ng-change function and check its value.

HTML

  <inputtype="checkbox" 
         value="{{item.id}}"
         ng-model="item.selected"
         ng-change="updateTotal(item.selected)"> &nbsp; {{item.name}}

Controller

$scope.updateTotal = function(item_selected) {

    if (item_selected) {
      $scope.totalSelected++;
    }
    else {
      $scope.totalSelected--;
    } 
}

UPDATED

You can test it here, in this plnkr

Post a Comment for "Angularjs Checkbox Ng-change Issue With $event.target"