我正在使用角度7。而且我有父级和子级组件,如下Stackblitz。但是,我从子组件中给出了formControlName
。何时,我写了“ id”而不是formControlName
,所以一切正常。但是,当我写formControlName
时,它给了我错误没有用于名称为'brand'的表单控件的值访问器
我将在其他文章中看到的这段代码添加到app.module.ts中以进行解决,但这没用。
providers: [
{
provide: NG_VALUE_ACCESSOR,
multi: true,
useExisting: forwardRef(() => MyChildComponentComponent),
}
]
答案 0 :(得分:1)
让您的应用程序组件如下:
<app-my-child-component formControlName="brand"></app-my-child-component>
在模块上的组件中添加提供程序,并在其中实现“ ControlValueAccessor”方法。
@Component({
selector: 'app-my-child-component',
templateUrl: './my-child-component.component.html',
styleUrls: ['./my-child-component.component.css'],
providers:
[ {
provide: NG_VALUE_ACCESSOR,
multi: true,
useExisting: forwardRef(() => MyChildComponentComponent),
}],
})
export class MyChildComponentComponent implements ControlValueAccessor {
value: string;
onChange() {}
onTouched() {}
isDisabled: boolean = false;
writeValue(value) {
this.value = value
}
registerOnChange(fn) {
this.onChange = fn
}
registerOnTouched(fn) {
this.onTouched = fn
}
setDisabledState(isDisabled) {
this.isDisabled = isDisabled;
}
}
不需要child component
中的另一种形式,就像这样:
<input
[value]="value"
(input)="onChange($event.target.value)"
(blur)="onTouched()"
[disabled]="isDisabled"
type="text">