Ответ 1
Они не то же самое, ясно. Один используется исключительно в контроллере; другая - директива на входном элементе.
Но даже в их применении они различаются.
Когда вы используете $watch
, наблюдаемое выражение будет оцениваться в каждом цикле дайджеста, а если есть изменение, вызывается обработчик.
С ng-change
обработчик вызывается явно в ответ на событие.
С $watch
изменение может происходить из любого места: действие пользователя, функция контроллера, сервис - все вызовет обработчик.
С ng-change
это изменение ограничивается действием пользователя на конкретном элементе ввода.
Следует также отметить, что ng-change
работает только в сочетании с ng-model
- другими словами, выражение ng-change
оценивается только тогда, когда ngModel.$viewValue
(см. ngModelController
для дополнительной информации) изменяется, что обычно происходит в ответ на инициированное пользователем событие.