如何在组件外定义 Angular FormGroup 控件
How to Define Angular FormGroup controls out of component
我有一个具有 FormGroup 的组件(在示例中名为:Hello)。必须使用 ng-content
.
在组件外部定义 FormGroup 的控件
stackblitz 中的一个简单示例:
https://stackblitz.com/edit/angular-ivy-bqczmm?file=src%2Fapp%2Fhello.component.ts
你好组件:
<form [formGroup]="fg">
<ng-content select="[fg-controls]"></ng-content>
<pre>{{fg.value | json}}</pre>
</form>
父组件:
<hello>
<div fg-controls>
<h1>Item 1</h1>
aaa: <input formControlName="aaa" /><br /><br />
bbb: <input formControlName="bbb" /><br /><br />
ccc: <input formControlName="ccc" />
</div>
</hello>
<hello>
<div fg-controls>
<h1>Item 2</h1>
aaa: <input formControlName="aaa" /><br /><br />
bbb: <input formControlName="bbb" /><br /><br />
</div>
</hello>
我遇到了这个错误:
我知道变量是在 FormGroup 之外定义的,但在运行时 DOM 没问题:
有没有正确的做法?
这是一个如何使用它的例子https://stackblitz.com/edit/angular-ivy-uqosqh?file=src%2Fapp%2Fhello.component.ts
您可以将 provider 添加到 hello 组件,它将获得对其表单的引用
providers: [
{
provide: ControlContainer,
useFactory: hc => {
return hc.form;
},
deps: [HelloComponent]
}
]
...
ViewChild(FormGroupDirective) form;
但问题是在创建表单元素之前呈现控件,因为表单元素位于 HomeComponent 元素的视图中。要完成这项工作,您应该推迟内部输入的渲染,在我的例子中,我是在 setTimeout
.
的帮助下完成的
但这似乎不是 angular 表单 API 的工作方式,它可能会导致您的应用程序出现问题
我有一个具有 FormGroup 的组件(在示例中名为:Hello)。必须使用 ng-content
.
stackblitz 中的一个简单示例: https://stackblitz.com/edit/angular-ivy-bqczmm?file=src%2Fapp%2Fhello.component.ts
你好组件:
<form [formGroup]="fg">
<ng-content select="[fg-controls]"></ng-content>
<pre>{{fg.value | json}}</pre>
</form>
父组件:
<hello>
<div fg-controls>
<h1>Item 1</h1>
aaa: <input formControlName="aaa" /><br /><br />
bbb: <input formControlName="bbb" /><br /><br />
ccc: <input formControlName="ccc" />
</div>
</hello>
<hello>
<div fg-controls>
<h1>Item 2</h1>
aaa: <input formControlName="aaa" /><br /><br />
bbb: <input formControlName="bbb" /><br /><br />
</div>
</hello>
我遇到了这个错误:
我知道变量是在 FormGroup 之外定义的,但在运行时 DOM 没问题:
有没有正确的做法?
这是一个如何使用它的例子https://stackblitz.com/edit/angular-ivy-uqosqh?file=src%2Fapp%2Fhello.component.ts
您可以将 provider 添加到 hello 组件,它将获得对其表单的引用
providers: [
{
provide: ControlContainer,
useFactory: hc => {
return hc.form;
},
deps: [HelloComponent]
}
]
...
ViewChild(FormGroupDirective) form;
但问题是在创建表单元素之前呈现控件,因为表单元素位于 HomeComponent 元素的视图中。要完成这项工作,您应该推迟内部输入的渲染,在我的例子中,我是在 setTimeout
.
但这似乎不是 angular 表单 API 的工作方式,它可能会导致您的应用程序出现问题