【发布时间】:2020-04-18 04:44:59
【问题描述】:
我正在创建一个自定义角度组件,当我的 FormControl(反应式表单)无效时,它会显示错误工具提示。 但我不知道如何访问自定义组件中的 FormControl 以检查它是否被标记为有效。
我想要完成的事情
<div [formGroup]="form">
<input formControlName="name" type="text" />
<custom-validation-message formControlName="name">My special error message!</custom-validation-message>
</div>
已经遇到的东西
错误错误:表单控件没有值访问器,名称为:'surveyType'
通过使用 NG_VALUE_ACCESSOR 实现 ControlValueAccessor 来解决此问题,即使我不想更改该值。我还添加了一个注入器来访问 NgControl。
import { Component, OnInit, Injector } from '@angular/core';
import { NgControl, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
@Component({
selector: 'custom-validation-message',
templateUrl: './validation-message.component.html',
providers: [{
provide: NG_VALUE_ACCESSOR, multi: true, useExisting: ValidationMessageComponent
}]
})
export class ValidationMessageComponent implements ControlValueAccessor, OnInit {
public formControl: any;
constructor(private injector: Injector) {
super();
}
public ngOnInit(): void {
const model = this.injector.get(NgControl);
this.formControl = model.control;
}
public writeValue(obj: any): void {
}
public registerOnChange(fn: any): void {
}
public registerOnTouched(fn: any): void {
}
public setDisabledState?(isDisabled: boolean): void {
}
}
当前问题 model.control 未定义。检查模型后,我发现模型和空一样好,只有 _parent 是我表单的完整表示。 model._parent.controls 确实包含我表单的所有控件。但是我还是不知道当前的控件。
【问题讨论】:
标签: angular angular-reactive-forms angular-components