2016-03-25 11 views
1

Angularで$ setPristine()と$ setUntouched()関数を使用してフォームフィールドをクリアします。しかし、それらは名前を持つフォームでしか動作しないようです。名前がなく、単純なサブミット機能しか持たないフォームを持っているとどうなりますか?フォーム名がないときにAngularJSのフォームをクリアする方法

私はここにドキュメントを読んで:https://docs.angularjs.org/api/ng/type/form.FormController

これは動作しません:

$scope.currentRecord={}; 
+2

あなたのフォームに 'name'を追加する際に問題がありますか? Angularは、フォーム名がスコープ上の特定のフォームのFormControllerインスタンスを表すプロパティとして使用されるため、名前付きフォームのみのFormControllerのインスタンスを作成します。名前がなくても、スコープの任意のプロパティ名にFormControllerインスタンスを関連付けることはできません。 – Arkantos

+0

ああ、ありがとうございました@Arkantos – OneMoreQuestion

答えて

1

角度: "この" ではなく "この"

試してみるの

$scope.submit = function() { 

     // blah blah 

     // Resets the form fields to blank 
     // I could simply do 
     // $scope.field1 = ''; 
     // $scope.field2 = ''; 
     // But I want it to look cleaner 

     This.$setPristine(); 
     This.$setUntouched(); 

    }; 
+0

これは私が疑っているものです。解明してくれてありがとう! – OneMoreQuestion

0

使用をフォーム名がuであるため、名前付きフォームの場合のみFormControllerのインスタンスが作成されますスコープ上の特定のフォームのFormControllerインスタンスを表すプロパティとしてsedを使用します。名前がなくても、スコープの任意のプロパティ名にFormControllerインスタンスを関連付けることはできません。次のマークアップあなたのMyControllerで

<div ng-controller="MyController"> 

    <form name="myForm" id="myForm" ng-submit="handleSubmit()"> 
     /* Some Markup */ 
    </form> 

</div> 

与え例えば

$scopeFormControllerインスタンスを表すmyFormと呼ばれる性質を持って、あなたは以下のような方法やアクセスプロパティを呼び出すことができます。

$scope.myForm.$valid 
$scope.myForm.$setPristine(); 
$scope.myForm.$setUntouched(); 

setPristine()setUntouched()を呼び出すと、唯一のフォームに追加されたクラスから明らかなようにdirtyからpristineuntouchedにフォームの状態を変更しますが、フォームフィールドをリセットしません。 FormControllerに公開されている公開方法はありませんが、フォームフィールドと対応するモデル値をリセットしますが、ng-modelを使用して値をバインドする方法を少し変更するだけで簡単に実現できます。モデルでドット(。)を使用すると、単一のオブジェクト内のすべてのフォーム状態を取得できるようになり、シャドウプロパティを作成できなくなります。あなたのHTMLで

、お使いのコントローラで

<input type="text" id="fullName" name="fullname" ng-model="data.fullName"/> 
<input type="email" id="email" name="email" ng-model="data.email" /> 

angular.module('MyApp', []) 
     .controller('MyController', function($scope) { 

    $scope.data = { 
    fullName : '', 
    email : '' 
    }; 


    $scope.resetForm = function(){ 
    /* reset the data to a new object so that all the properties 
    * of form are reset 
    */ 
    $scope.data = {}; 
    }; 

}); 

ここでアクションのサンプルPenです。これが役に立ちますようお願いいたします:)

+0

私はあなたがそこから得た投稿を読みました、私はすでに質問にそれを含めました。私はクリーナーソリューションを探しています – OneMoreQuestion

+0

これはまったく悪い解決策ではありません。おそらくそれはあなたのための唯一の解決策です。 –

+0

名前を使用したくない場合は、他の解決策はわかりません。 –

関連する問題