2017-03-21 6 views
0

テンプレートフォーム用の公式Angular2チュー​​トリアルに従っていますが、JavaScriptの機能がAngular2 ngModelにどう対処しているのかを理解しています。公式の文書に明示的に述べられていないが、私はresetが入力値をデフォルトに設定していると信じている。それはnullAngular2テンプレートフォーム - リセット関数を理解しようとしています

例では、我々はnewHero機能を持っているので、だから、そうです:

newHero() { 
    this.model = new Hero(42, '', ''); 
} 

、我々は、フォームの "リセット" は、この関数が呼び出される:

<button type="button" class="btn btn-default" (click)="newHero(); heroForm.reset()"> 
    New Hero (official) 
</button> 

newHeroこと関数namepowerを空の文字列に設定します。しかし、この関数の実行後以来、私たちは同様heroForm.reset()をフォームをリセット、次のように新しいオブジェクトは次のとおりです。

{ "id": 42, "name": null, "power": null, "alterEgo": null }

これは面白いです、そうではありませんか? nullは空の文字列(Difference between null and empty string)には等しくないので、これは間違っていると主張することができます。しかし、それは公式のAngular2のドキュメントにあるので、わかりません - 私はこの権利を得ていませんか?

私は物事がこれに呼び出される順序変更:新しいのデフォルト値が存在することになる場合{ "id": 42, "name": "", "power": "" }

今想像:これは実際に正しいオブジェクトを生成

<button type="button" class="btn btn-default" (click)="heroForm.reset(); newHero()"> 
    New Hero (alt) 
</button> 

をオブジェクトの場合、nameJessica Albaに変更されたとします。 Angularの公式の例では、この値がnullに上書きされるため、モデルをリセットする機能があるのはなぜですか?

ここでリセット用2つのボタン、公式および代替1(上部のmodel JSONに注意してください)と、プロジェクトの:https://plnkr.co/edit/1w2SSv8qxpOCjfDaJxPz?p=preview

は、だから私の質問は次のとおりです。間違ったドキュメントの例である、または私が行方不明です何か? reset関数は実際に値をnullに変更しますか?

+0

私はあなたが上のチュートリアルを考えていると思います。目的は、角度2で作業を始めるのを手助けすることです。フレームワークに慣れていれば、必要に応じてオブジェクトを設定できます。例えば、新しいオブジェクトにIDを割り当てるのは意味がありません。なぜならそれは一般的にバックエンドなので、データを保存する前にそれをチェックすることになります...あなたの質問に答えるために、リセット関数はあなたが望むものを割り当てますデフォルト値(null、空文字列、定義済みヒーローパワーなど)になるようにしてください。 – mickdev

+0

私はあなたに同意します。私はここでニックピッキングしていますが、これを表現する方法では、newHero関数は意味をなさない。そこに何を置くかにかかわらず、それは無効になります。私は順序を変更することが理にかなっていると思います(最初にフォームをリセットしてから、関数を呼び出してください)。私はこれがいくつかの混乱を引き起こすことが想像することができます。例えば私を見て! – uglycode

答えて

0

あなたは角度ソースコードを見ると、あなたはNgFormインスタンス上reset()を呼び出すと、その後(hereを文書化)順番にFormGroup#resetを呼び出すNgForm#resetForm(value: any = undefined)を呼び出していることがわかります:

FormGroupをリセットします

。これは、デフォルトでは意味:

  • グループとすべての子孫は、グループ
  • 手付かずマークされ、すべての子孫が手付かず
  • をマークされているすべての子孫の値がnullまたは空のマップ

になります がフォームの構造と一致する状態のマップをキーとして制御名を渡して、特定のフォーム状態にリセットすることもできます。

そうです、かかわらずnullが本当にあなたのアプリケーションに応じて標準的な「初期値」であるかどうかのnullに値をリセットしますNgFormreset()を呼び出し、デフォルトで。しかし、resetForm(value)control name : initial value値のマップで呼び出す代わりに、この動作を無効にすることができます。

+0

これは私の質問に答え、公式文書の例が意味をなさないことを確認しました。後ですぐにプロパティをリセットする場合、プロパティを設定する関数を呼び出すのはなぜですか?ありがとう! – uglycode

関連する問題