1 つの方法は、すべての属性を強制的にダーティにすることです。各コントローラーでそれを行うことができますが、非常に面倒です。一般的な解決策を持っている方が良いでしょう。
私が考えることができる最も簡単な方法は、ディレクティブを使用することでした
- フォーム送信属性を処理します
- すべてのフォームフィールドを繰り返し処理し、元のフィールドにダーティマークを付けます
- 送信機能を呼び出す前に、フォームが有効かどうかを確認します
ここにディレクティブがあります
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