Why this ng-change does not fire

Problem

I added a dropdown and hooked up the selectChange() method to the basic ng-change demo commonly found on the AngularJS site. The problem is when the dropdown is changed the selectChange() does not fire. Can anyone tell me why? Plunkr here

<body ng-app="changeExample">
    <script>
    angular.module('changeExample', [])
      .controller('ExampleController', ['$scope', function($scope) {
        $scope.counter = 0;
        $scope.change = function() {
          $scope.counter++;
        };

        $scope.selectChange = function(){
          alert('foo');
          $scope.counter++;
        };

      }]);
  </script>
  <div ng-controller="ExampleController">
    <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
    <input type="checkbox" ng-model="confirmed" id="ng-change-example2" />
    <label for="ng-change-example2">Confirmed</label><br />

    <tt>debug = {{confirmed}}</tt><br/>
    <tt>counter = {{counter}}</tt><br/>

    <select id='drpCars' ng-change="selectChange()">
      <option value="volvo">Volvo</option>
      <option value="saab">Saab</option>
      <option value="opel">Opel</option>
      <option value="audi">Audi</option>
    </select>

    <input type="text" name="CarValue"><br>
  </div>
Problem courtesy of: ChiliYago

Solution

Try with this modified code.

<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Example - example-ngChange-directive-production</title>


  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>



</head>

<body ng-app="changeExample">
    <script>
    angular.module('changeExample', [])
      .controller('ExampleController', ['$scope', function($scope) {
        $scope.counter = 0;
        $scope.change = function() {
          $scope.counter++;
        };

        $scope.selectChange = function(value){
          alert(value);
          $scope.counter++;
        };

      }]);
  </script>
  <div ng-controller="ExampleController">
    <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
    <input type="checkbox" ng-model="confirmed" id="ng-change-example2" />
    <label for="ng-change-example2">Confirmed</label><br />

    <tt>debug = {{confirmed}}</tt><br/>
    <tt>counter = {{counter}}</tt><br/>

    <select id='drpCars' ng-model = "value" ng-change="selectChange(value)">
      <option value="volvo">Volvo</option>
      <option value="saab">Saab</option>
      <option value="opel">Opel</option>
      <option value="audi">Audi</option>
    </select>

    <input type="text" name="CarValue"><br>
  </div>

</html>
Solution courtesy of: Rahul Dess

Discussion

You need to apply the ng-model attribute for ng-change to trigger


From the docs

The ngChange expression is only evaluated when a change in the input value causes a new value to be committed to the model.

https://docs.angularjs.org/api/ng/directive/ngChange

Discussion courtesy of: Blowsie

This recipe can be found in it's original form on Stack Over Flow.