私はこの方法を使っています: http://plnkr.co/edit/A6gvyoXbBd2kfToPmiiA?p=preview blurの時だけフィールドを検証します。これはうまくいっているのですが、ユーザーが 'submit'ボタン(実際のsubmitではなく、データをクリックして関数を呼び出すもの)をクリックしたときにも、フィールドを検証したいと思います。
このボタンをクリックしたときに、再度すべてのフィールドの検証を行う方法はありますか?
angularの方法では、モデル変更のたびに検証を行い、必要なときだけユーザーに結果を表示するようにしています。
この場合、いつエラーを表示するかはあなたが決めることができ、フラグを設定するだけです。 http://plnkr.co/edit/0NNCpQKhbLTYMZaxMQ9l?p=preview
私が知っている限りでは、より高度なフォームコントロールを可能にするために angular に提出された問題があります。まだ解決していないので、既存の検証方法をすべて再発明するのではなく、この方法を使うことにします。
edit: しかし、もしあなたが自分のやり方にこだわるのであれば、ここにあなたが修正したsubmit前のバリデーションを使った方法があります。http://plnkr.co/edit/Xfr7X6JXPhY9lFL3hnOw?p=preview コントローラは、ボタンがクリックされたときにイベントをブロードキャストし、ディレクティブは検証の魔法をかけます。
一つの方法は、すべての属性をダーティにすることです。これはコントローラごとに行うことができますが、非常に面倒なことになります。一般的な解決策があればいいのですが。
私が思いついた最も簡単な方法は、次のようなディレクティブを使うことでした。
以下にディレクティブを示します。
myModule.directive('submit', function() {
return {
restrict: 'A',
link: function(scope, formElement, attrs) {
var form;
form = scope[attrs.name];
return formElement.bind('submit', function() {
angular.forEach(form, function(field, name) {
if (typeof name === 'string' && !name.match('^[\$]')) {
if (field.$pristine) {
return field.$setViewValue(field.$value);
}
}
});
if (form.$valid) {
return scope.$apply(attrs.submit);
}
});
}
};
});
そして、例えばフォームのhtmlを更新します。
<form ng-submit='justDoIt()'>
となります。
<form name='myForm' novalidate submit='justDoIt()'>
完全な例はこちらをご覧ください: http://plunker.co/edit/QVbisEK2WEbORTAWL7Gu?p=preview