I have a problem when angular's ng-change is called when model is changed programmatically.
$scope.sendMessage = function() {
$scope.message = "Message sent";
}
$scope.confirmed = true;
$scope.mySelectBox = $scope.selects[1];
<select ng-model="mySelectBox"
ng-options="item.name for item in selects track by item.name"
ng-change="sendMessage()">
</select>
Here is code example: http://plnkr.co/edit/R4MO86ihMrauHXhpCMxi?p=preview
Message should be null, because sendMessage
shouldn't be called. Model is changed programmatically.
You can try with ngModelOptions. See this plunker for reference http://plnkr.co/edit/BdKx62RW5Ls2Iz1H3VR1?p=preview.
In my example I used ng-model-options="{ updateOn: 'change', debounce: { change: 0 } }"
and it seems to work. It only runs function provided in ngChange when I change the selection. On initialize phase message
stays empty.
The ng-change callback is changed on each model change, and it treats the initial setup as such change. What you might want to do is to run desired code only after user interacts with it. You can check the $touched property of the field:
<form name="exampleForm" ng-controller="ExampleController">
<select ng-model="mySelectBox" name="mySelectBox"
ng-options="item.name for item in selects track by item.name"
ng-change="sendMessage()">
</select>
<p>message = {{message}}</p>
</form>
$scope.sendMessage = function() {
if ($scope.exampleForm.mySelectBox.$touched) {
$scope.message = "Message sent";
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With