我创建了一个自定义组件,代表密码表单控件(以下代码简化)。
PasswordComponent(html)
<form [formGroup]="passwordForm">
...
<input formControlName="password" type="password">
</form>
PasswordComponent (ts)
密码组件(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 { }
}
我在其他组件中使用它,而不是标准的输入元素:
<form [formGroup]="userForm">
...
<password formControlName="password"></password>
</form>
验证器来自外部表单(它们没有在PasswordComponent内定义)
this.userForm = fb.group({
...
password: ['', [Validators.minLength(10), Validators.maxLength(100)]]
});
我的问题是:如何从PasswordComponent内部获取<password>
元素的有效性?我想根据有效性样式化它。换句话说,我如何从代表此控件的PasswordComponent中获取用户表单中“密码”控件的有效性。
this.inj.get(NgControl)
时,我得到一个FormControlName
,但它是无用的,因为formControlname.parent.control
是一个formgroup
,而且我不知道哪个控件是“自定义控件”。 - Andre ElricongAfterViewInit
中,我可以读取name
然后获取正确的控件。_parent
是私有的。 - Andre Elrico