angular - 使用 Reactive Forms 将 formControlName 转发到 Angular 中的内部组件
问题描述
<some-input>
我有一个包装到的自定义控件组件<ext-some-input>
。SomeInput被封装,拥有自己的 API 并支持响应式表单。
ExtSomeInput创建为SomeInput的高级包装器。
我有以下html:
<form [formGroup]="form">
<ext-some-input formControlName="name">
</form>
和ExtSomeInput的 html:
<some-input formControlName="_???_"></some-input>
问题是如何将formControlName转发到内部SomeInput组件?我需要将表单和内部 formControl 绑定起来。这可能吗?
编辑:
我已经用这个问题创建了 stackblitz 项目:这里
解决方案
您的内部组件可以使用@Input
controlName
,但不能开箱即用:
错误:formControlName 必须与父 formGroup 指令一起使用。
为了将您的控件与父 FormGroup 绑定,您可以定义viewProvider
如下:
import { Component, Input, OnInit} from '@angular/core';
...
import { ControlContainer, FormGroupDirective } from '@angular/forms';
@Component({
...
viewProviders: [
{
provide: ControlContainer,
useExisting: FormGroupDirective
}
]
})
export class DateWrapperComponent implements OnInit {
@Input() controlName: string;
}
如果您不知道作为ControlContainer
( FormGroupDirective
,FormGroupName
或FormArrayName
) 提供的确切指令,您可以使用更通用的方法:
viewProviders: [
{
provide: ControlContainer,
useFactory: (container: ControlContainer) => container,
deps: [[new SkipSelf(), ControlContainer]]
}
]
推荐阅读
- mysql - 给定一个 ID 查找该元素属于哪个表并检索数据
- smtp - WSO2IS 5.3.0 smtp 电子邮件适配器强制 tls 1.2
- vba - 在 MS Access 中发生 dbFailOnError 时发送电子邮件
- php - 联系表单提交后显示错误消息:使用 PHP-mailer
- flutter - Flutter Hooks - useState 初始值
- node.js - 在 NodeJS 服务器上获取本地网络 IP 地址
- java - java zoneddatetime toEpochSecond 不转换为本地时间
- apache-spark - Pyspark - 在地图函数中读取数据?
- excel - 使用具有不同数字格式的 VBA 从 Excel 外部粘贴信息时如何正确编码?
- javascript - 如何使用 react-monaco-editor 实现 Monaco 编辑器的动态调整大小?