I currently have a model which is the value of a search box. The search operation is performing perfectly but I also want yet another feature to be performed when the search text is modified. So i wanna add a listener
or watch
the model variable. How can I do it?
Asked
Active
Viewed 3.6k times
21

Rahul
- 44,892
- 25
- 73
- 103
-
Are you using jquery? – SteveP Mar 02 '13 at 13:33
-
@SteveP No.I am not using jquery. – Rahul Mar 02 '13 at 13:34
1 Answers
45
You've got 2 options to cover your use case:
Use the ng-change directive
You can write your input like so:
Search: <input ng-model="search.model" ng-change="changeHandler()">
where the changeHandler
is a function defined on a scope.
Use a watch on a scope
by writing in your controller:
$scope.$watch('search.model', function(newVal, oldVal){
console.log("Search was changed to:"+newVal);
$scope.search.watch = newVal;
});
Here is a working plunk illustrating both: http://plnkr.co/edit/Jgb2slcBFzLNKK0JFNyo?p=preview
The difference between the 2 approaches is that ng-change
will fire only as a result of user's iteractions with an input while $watch
will fire for any model mutation - triggered from the input control or any other change to the model. So you can preciselly choose on which events you want to react.

Community
- 1
- 1

pkozlowski.opensource
- 117,202
- 60
- 326
- 286
-
1By the way, I understood that this was not a good practice to use `$watch` on `ngModel` values. According to what I read, `$watch` is essentially dedicated to scope listening, while ngChange let us listen to `ngModel` changes ... but maybe I misunderstood. – M'sieur Toph' Oct 15 '14 at 08:42