web-dev-qa-db-ja.com

Angularjsで$ watchまたはng-changeを使用する場合

いつangular $watch関数および使用時ng-change angularjsディレクティブ?私にとって、彼らは両方同じことができます。

それらの間に違いや使用パターンはありますか?

43
levi

明らかに同じではありません。 1つはコントローラーでのみ使用されます。もう1つは、入力要素のディレクティブです。

しかし、それらのアプリケーションでさえも異なります。

$watchを使用すると、ダイジェストサイクルごとに監視対象の式が評価され、変更がある場合はハンドラーが呼び出されます。

ng-changeを使用すると、イベントに応答してハンドラーが明示的に呼び出されます。

$watchを使用すると、ユーザーアクション、コントローラー機能、サービスなど、どこからでも変更を行うことができます。すべてがハンドラーをトリガーします。

ng-changeを使用すると、変更は特定の入力要素に対するユーザーアクションに制限されます。

ng-changeng-modelと組み合わせてonlyのみで動作することに注意してください。つまり、ng-change式は、ngModel.$viewValue(詳細は ngModelController ドキュメントを参照)が変更された場合にのみ評価されます。これは通常、ユーザーが開始したイベントへの応答で発生します。

91
New Dev