Env*_*vil 1 code-reuse angular-material angular angular-reactive-forms controlvalueaccessor
我按照本指南创建ControlContainer可重用表单,成功创建了可重用表单组,但是当我尝试使用 创建可重用表单元素时matInput,遇到了No value accessor错误。这是my-form-field.ts文件:
import { Component, Input, OnInit } from '@angular/core';
import {
ControlContainer,
FormBuilder, FormControl,
FormGroup,
FormGroupDirective,
} from '@angular/forms';
@Component({
selector: 'my-form-field',
template: `
<mat-form-field>
<mat-label>{{label}}</mat-label>
<input matInput [formControlName]="formControlName">
</mat-form-field>
`,
viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],
})
export class MyFormFieldComponent implements OnInit {
@Input() formControlName: string;
@Input() label: string;
formGroup: FormGroup;
constructor(private ctrlContainer: FormGroupDirective, private formBuilder: FormBuilder) {
}
ngOnInit(): void {
this.formGroup = this.ctrlContainer.form;
const control = new FormControl('');
this.formGroup.addControl(this.formControlName, control);
}
}
Run Code Online (Sandbox Code Playgroud)
我的使用方法如下:
<form [formGroup]='formGroup'>
<my-form-field label='Test' formControlName='name'></my-form-field>
</form>
Run Code Online (Sandbox Code Playgroud)
在这里重新创建了示例: https://stackblitz.com/edit/angular-9-material-reusable-matinput ?file=src/app/my-form-field.ts
我的方法可能是错误的,因此可重用 matInput 表单组件的建议也可以。
您正在使用 的名称@Input formControlName,这会让 Angular 感到困惑,请使用另一个名称,例如controlName
<my-form-field label='Test' controlName='name'></my-form-field>
Run Code Online (Sandbox Code Playgroud)
并在输入中
@Input('controlName') formControlName: string;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9581 次 |
| 最近记录: |