2016-09-20 5 views
8

setValueに渡すときに 'onlySelf'パラメータが何をするのか理解しようとしています。角2 - FormControlのsetValue 'onlySelf'パラメータ

this.form.get('name').setValue('', { onlySelf: true }) 

ドキュメントは言う:「onlySelfがtrueの場合、この変更はこれだけFormControlはなく、その親要素の検証に影響します。このデフォルト値はFalseに。。」

しかし、私はこれを理解するのに苦労しています。 Angularsのモデル駆動型を使用することはまだかなり新しいです。

答えて

13

デフォルトでAngular2は、noと指定しない限り、フォーム要素の値が更新されるたびに、フォームコントロール/フォームグループの有効性が最上位まで連続してチェックされます。 onlySelfはそれを手助けするツールです。

あなたは usernameフィールドと passwordフィールドを持つ loginFormがあるとし、それらの両方は、このように、必要とされています。このコードの後

this.userNameControl = this.formBuilder.control('Harry', Validators.required); 
this.passwordControl = this.formBuilder.control('S3cReT', Validators.required); 
this.loginForm = this.formBuilder.group({ 
    userName: this.userNameControl, 
    password: this.passwordControl 
}); 

this.loginForm.validtrueです。

デフォルト設定(onlySelf = false)を使用してコントロールの値を設定すると、Angular2はコントロールの有効性とフォームグループの有効性を更新します。たとえば、この:

​​

のみだけpasswordControlの妥当性を変更します:

this.passwordControl.valid === false 
this.loginForm.valid === true 
2

入れを

this.passwordControl.setValue(''); 

はしかし、これは

this.passwordControl.valid === false 
this.loginForm.valid === false 

になりますこのように、 mainFormという有効というフォームがあります。それには4つのコントロールがあり、4つのコントロールには価値があります。今度は、コントロールの値を更新することに決めました。コントロールの値を正しくない値に更新し、onlySelf: trueを指定したとしましょう。 this.mainForm.validに電話をかけようとすると、と有効である(有効でない)のフォームであっても、フォームが送信されないようにすることができます。しかし、フォームの有効なプロパティがtrueを報告しているので、一貫性のない値をバックエンドに送信します。

なぜこのプロパティを持つのが混乱するかもしれませんが、1つの値またはコントロールのためにフォームを無効にしたくない場合があります。サーバー上のいくつかの高度なチェックがあり、サーバー上の値を修正したい場合や、その時点で利用できない外部Webサービスの値に依存する可能性があります。私はシナリオの数があると確信していますが、これは私の頭の上から何かです。

関連する問題