哪个@angular/*包是bug的来源?
forms
这是个回归吗?
否
描述
formControlName的父级是FormControlDirective,而不是formGroupName作为父级。这样一来,3个输入缺少名为"form"的表单组。
<button type="button" (click)="onClick()">Load</button>
<form [formGroup]="form">
<ng-container *ngTemplateOutlet="fields; context : {$implicit : schema}"></ng-container>
<ng-template #fields let-node>
<ng-container *ngFor="let control of node.properties | keyvalue">
<ng-container [ngSwitch]="widget(control.value)">
<ng-container *ngSwitchCase="'form'">
<div [formGroupName]="key(control)" >
<ng-container *ngTemplateOutlet="fields; context : {$implicit : control.value}"></ng-container>
</div>
</ng-container>
<ng-container *ngSwitchDefault>
<input type="text" [formControlName]="key(control)" [placeholder]="key(control)">
</ng-container>
</ng-container>
</ng-container>
</ng-template>
</form>
{
"$schema" : {
"properties" : {
"form" : {
"widget" : "form",
"type" : "object",
"properties" : {
"firstName" : {
"type" : "string",
"title" : "First Name",
"widget" : "text"
},
"lastName" : {
"type" : "string",
"title" : "Last Name",
"widget" : "text"
},
"birthDate" : {
"type" : "string",
"title" : "Birthdate",
"widget" : "date"
}
}
}
}
},
"form" : {
"firstName" : "Patrick",
"lastName" : "Bittner",
"birthDate" : "1980-04-01"
}
}
import {Component, Input, OnInit, ViewEncapsulation} from '@angular/core';
import {FormBuilder, FormGroup} from "@angular/forms";
import {Node} from "./as-meta-form.classes";
@Component({
selector: 'as-meta-form',
templateUrl: 'as-meta-form.component.html',
styleUrls: ['as-meta-form.component.css'],
encapsulation: ViewEncapsulation.None
})
export class AsMetaFormComponent implements OnInit {
@Input() model!: any
@Input() schema!: Node
form!: FormGroup
constructor(private formBuilder: FormBuilder) {
}
ngOnInit(): void {
this.form = this.formBuilder.group(this.schema2Form(this.schema.properties));
}
onClick() {
this.form.setValue({form: this.model.form})
}
key(value: any): string {
return value.key
}
widget(value: any): string {
return value.widget
}
schema2Form(properties: any): FormGroup {
let switchNode = (node: any) => {
switch (node.widget) {
case "form" : {
return this.formBuilder.group(this.schema2Form(node.properties))
}
default : {
return [""]
}
}
}
return Object.entries(properties).reduce((prev, [key, value]) => {
prev[key] = switchNode(value);
return prev;
}, {} as any)
}
}
请提供一个最小复现bug的链接
请提供您看到的异常或错误
ERROR Error: Cannot find control with name: 'birthDate'
ERROR Error: Cannot find control with name: 'lastName'
ERROR Error: Cannot find control with name: 'firstName'
请提供您发现此bug的环境(运行ng version
)
Angular CLI: 15.1.1
Node: 19.4.0 (Unsupported)
Package Manager: npm 9.2.0
OS: win32 x64
Angular: 15.1.0
... animations, common, compiler, compiler-cli, core, forms
... platform-browser, platform-browser-dynamic, router
Package Version
---------------------------------------------------------
@angular-devkit/architect 0.1501.1
@angular-devkit/build-angular 15.1.1
@angular-devkit/core 15.1.1
@angular-devkit/schematics 15.1.1
@angular/cli 15.1.1
@schematics/angular 15.1.1
ng-packagr 15.1.1
rxjs 7.8.0
typescript 4.9.4
还有其他信息吗?
- 无响应*
1条答案
按热度按时间vbkedwbf1#
我已经找到了一个作为解决方法的临时方案。