Dro*_*pai 3 forms form-control angular
我在组件 A 中有带有表单控件的表单。我决定将一些表单控件移动到单独的组件 B,以防止其他组件中的代码重复。
A.html:
<form [formGroup]="editForm">
<B [formControllerName]="'name'" ></B>
<!-- Other form controls -->
</form>
Run Code Online (Sandbox Code Playgroud)
B.html:
<select class="form-select" formControlName="{{formControllerName}}">
<!-- Options -->
</select>
Run Code Online (Sandbox Code Playgroud)
我收到此错误: 错误:NG01050:formControlName 必须与父 formGroup 指令一起使用。您需要添加一个 formGroup 指令并向其传递一个现有的 FormGroup 实例(您可以在类中创建一个实例)。
如何从组件 A 访问表单控制器?
可以使用 viewProviders,参见,例如关于 FormArray 的 SO
一个更简单的
@Component({
selector: 'hello',
template: `<h1>Hello </h1>
<input [formControlName]="name"/>
`,
viewProviders:[{ provide: ControlContainer, useExisting: FormGroupDirective }]
})
export class HelloComponent {
@Input() name: string;
constructor(){}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用
<form [formGroup]="form">
<hello [name]="name" > </hello>
</form>
Run Code Online (Sandbox Code Playgroud)
在 .ts 中
name = 'name';
form=new FormGroup({
name:new FormControl()
})
Run Code Online (Sandbox Code Playgroud)
参见堆栈闪电战
另一种方法是传递自己的 FormControl 并使用
control:FormControl
@Input('control') set _control(value){
this.control=value as FormControl
}
<input [formControl]="control">
Run Code Online (Sandbox Code Playgroud)
你使用作为
<hello [control]="form.get('name')" > </hello>
Run Code Online (Sandbox Code Playgroud)