2013-07-23 10 views
8

私はフォームの側面に表示されるリストに要素を追加するためにフォームを使用しています。 マークアップは次のとおりです。AngularJs空のフォームと入力から無効な状態を削除

<form name="thingForm"> 
     <input required type="text" ng-model="thing.name"/> 
     <input required type="text" ng-model="thing.value"/> 
     <input type="submit" ng-click="addThing(thing)"/> 
    </form> 
    <ul> 
     <li ng-repeat="thing in things">{{thing.name}} with value of {{thing.value}}</li> 
    </ul> 

そして、私が持っているコントローラで:

$scope.things = []; 
$scope.addThing = function(thing) { 
    $scope.things.push(thing); 
    $scope.thing = {}; 
}; 

の作業jsfiddle:http://jsfiddle.net/cXU2H/1/

今、あなたが見ることができるよう、私はしかし、モデルを空にすることによって、フォームを空にすることができます入力には必須のタグがあるため、ブラウザにはエラーメッセージが表示されます(少なくともChromeの場合)。

私は同様の質問を見て:jsfiddleは私の例のようにまったく同じ動作をしますがhttps://stackoverflow.com/a/16296941/545925::私もこの答えを見てきました

  • 入力がクリアされた後、それはまだng-invalid-requiredを持っています私は1.1.xのブランチ$setPristine()にいないよので、
  • 残りの(と、それはまた、HTML5のエラーメッセージをトリガーする)クラスは私のために利用できない$setPristine()は同じよう
を振る舞います

もちろん、フォームの要素を反復処理し、すべてのng-invalid-requiredng-invalidクラスを削除する関数を書くことはできますが、これは私がこれを解決したい方法ではありません。それがjQueryのやり方です。

+0

'$ setPristine()'は正しいアプローチです。 1.1.xに切り替える必要がない場合は、このコミットであなたのバージョンをmonkey-patchしてください:https://github.com/angular/angular.js/commit/733a97adf87bf8f7ec6be22b37c4676cf7b5fc2b –

+0

1.1.xブランチは、 1.0.xバージョン? – adamors

+0

1.1.xにはかなりの変更点があり、大きな変更点があります。 changelogを参照してください:https://github.com/angular/angular.js/blob/master/CHANGELOG.md –

答えて

9

あなたは$ setPristineを正しく使用していますか?あなたがそれを追加すれば、あなたは簡単にあなたのフィドルで見ることができます。 http://jsfiddle.net/X6brs/

var myApp = angular.module('myApp', []); 

function MyCtrl($scope) { 
    $scope.things = []; 
    $scope.addThing = function(thing) { 
     $scope.things.push(thing); 
     $scope.thing = {}; 
     $scope.thingForm.$setPristine(true); 
    }; 
} 
+0

それはしません。 Chromeでは、入力が消去された直後に「このフィールドに入力してください」というHTML5エラーが表示されます。 – adamors

+0

これは別の問題です。提出後、最初の無効なフィールドに焦点を当てています。入力タイプをサブミットの代わりにボタンに変更するか、event.preventDefault()を実行して、自分のやり方でサブミッションを処理します。 –

+0

あなたは正しいです。私はボタンにpreventDefaultを追加し、それは働いた。ありがとう。 – adamors

0
$scope.thingForm.$setPristine(); 
$scope.thingForm.$setUntouched(); 

は、トリックを行います。

関連する問題