11

のような特定の形式を想定すると<form name="myForm">、単純なウォッチを使用して有効性、エラー、ダーティな状態などを簡単に監視できます。

$scope.$watch('myForm.$valid', function() {
  console.log('form is valid? ', $scope.myForm.$valid); 
});

ただし、このフォームの特定の入力が変更されたかどうかを監視する簡単な方法はないようです。そのようなディープウォッチングは機能しません:

$scope.$watch('myForm', function() {
  console.log('an input has changed'); //this will never fire
}, true);

$watchCollectionつまり、入力ごとに新しいウォッチを作成する必要があります。理想的ではありません。

ng-change複数の監視に頼ったり、各入力に配置したりすることなく、入力の変更をフォームで監視するエレガントな方法は何ですか?

4

2 に答える 2

7

重複の可能性とコメントについて:

その質問の指示的な解決策は機能しますが、それは私が考えていたものではありません (つまり、動作させるにはぼかしが必要なため、エレガントではありません)。

trueの 3 番目のパラメーターとして追加すると機能します$watch

$scope.$watch('myFormdata', function() {
    console.log('form model has been changed');
}, true);

詳細については、ドキュメントを参照してください。

ワーキングフィドル(コンソールログを確認)


別のより角度のある方法は、angular's を使用すること$pristineです。フォーム モデルを操作すると、このブール値のプロパティが次のように設定されfalseます。

フィドル

于 2015-05-06T16:15:57.140 に答える
4

私のフォームでの経験に基づいて (新しい開発者ですが、現在 Angular でしばらく作業しています)、フォームの変更を監視するエレガントな方法は、実際にはどのタイプの監視ステートメントも使用しないことです。
組み込みの Angular ブール値 $pristine または $dirty を使用すると、これらの値は入力フィールドまたはチェックボックスで自動的に変更されます。
問題は、しばらく困惑していた配列に追加したり、配列からスプライスしたりしても、値が変更されないことです。
私にとって最善の解決策は$scope.MyForm.$setDirty();、さまざまなアレイに追加または削除するたびに手動で行うことでした。魔法のように働きました!

于 2015-07-29T18:30:35.033 に答える