パスワードフォームコントロールを表すカスタムコンポーネントを作成しました(以下のコードは簡略化されています)。カスタムフォームコントロールの有効な値にアクセス
PasswordComponent(HTML)
<form [formGroup]="passwordForm">
...
<input formControlName="password" type="password">
</form>
PasswordComponent(TS)
...
@Component({
selector: 'password',
templateUrl: './password.component.html',
styleUrls: ['./password.component.css'],
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => PasswordComponent),
multi: true
}]
})
export class PasswordComponent implements ControlValueAccessor {
passwordForm: FormGroup;
onChange = (password: string) => { };
onTouched =() => { };
constructor() {
this.passwordForm = new FormGroup({
...
password: new FormControl('')
});
this.passwordForm.valueChanges.subscribe(data => this.onChange(this.value));
}
get value(): string {
return this.passwordForm.get('password').value;
}
writeValue(password: string): void {
this.passwordForm.get('password').setValue(password);
this.onChange(this.value);
}
registerOnChange(fn: any): void { this.onChange = fn; }
registerOnTouched(fn: any): void { this.onTouched = fn; }
setDisabledState?(isDisabled: boolean): void { }
}
Iの代わりに標準の入力要素の他の構成要素にそれを使用する:
<form [formGroup]="userForm">
...
<password formControlName="password"></password>
</form>
バリが外から来ていますフォーム(PasswordComponent内では定義されていません)
this.userForm = fb.group({
...
password: ['', [Validators.minLength(10), Validators.maxLength(100)]]
});
私の質問は、<password>
の要素の有効性をPasswordComponentの中からどのように得ることができますか?私は妥当性に基づいてそれを様式化したいと思います。言い換えれば、このコントロールを表すPasswordComponentからuserFormの 'password'コントロールの有効性をどのように得ることができますか。
これは魔法のように動作しますが、それはとても醜い、またはこれは、このことを考えている人私だけですか非常に基本的なユースケースのように見えます – dendimiiii
ここで何が起こっているのか詳しく説明してください。なぜ私たちは円形の間違いエラーを持っていますか?なぜインジェクタに1つがないのですか? – Ced
@Ced Thanks、updated – yurzui