私のフォームにはuser.email
があらかじめ入力されています。ユーザーがFormControl
のフィールドに元の以外の値を入力した場合にのみ、編集ボタンを有効にします。カスタムバリデーターでこれを行うことは可能ですか?角度2 - カスタムバリデータでフォームの値がデフォルト値から変更されたことを確認します
これは私のバリデータです:
import { FormControl } from '@angular/forms';
export class ChangedValidator {
static isValid(control: FormControl): any {
let initialValue = (' ' + control.value).slice(1);
if(initialValue === control.value){
return {
"changed": true
};
}
return null;
}
}
意図はFormControl.value
のクローンを作成することでしたが、私は、このクラスは値がFormControlに変更されるたびにインスタンス化されることを実現しています。
再利用不可能なコードを書き込む1つの方法は、データを格納するデータprovider
からuser.email
を取得し、それをFormControl.value
と比較することです。あなたが推測するかもしれませんが、バリデーターはUser
オブジェクトのパラメーターだけで動作します。
フォームの現在の値が初期化された値と異なるかどうかを確認する汎用Validator
を書きたいと思います。
編集:
これはpristine
でそれを行う方法があるが、それは完璧ではありません。
import { FormControl } from '@angular/forms';
export class ChangedValidator {
static isValid(control: FormControl): any {
if(control.pristine){
return {
"unchanged": true
};
}
return null;
}
}
だはい、あなたはどこカスタム検証を行うことができ、そして、(値が変更された場合のチェックは、それが変更されていない場合は、元に戻します)パラメータとして初期値を送る。 – silentsod
@silentsod 'pristine'はおそらく「十分に良い」ですが、可能であればそれをどのように送信するかを教えてください。私は他のスレッドを見ましたが、私が試したときにそれらのソリューションのどれも私のために働いていませんでした。 –