将动态 FormGroup 值复制到 Angular [Reactive Forms] 中的数据 class
Copy dynamic FormGroup values to data class in Angular [Reactive Forms]
我在 Angular.
中使用 Reactive Forms 创建了动态表单
能够动态删除和创建字段。
但是当尝试通过 onSubmit 获取提交表单的值时,我在模型 classes.
中得到空值
export class CreateListComponent implements OnInit {
sdklist: FormGroup;
ngOnInit() {
this.sdklist = new FormGroup({
SDKCollection: new FormArray([
this.initFirstChild(),
]),
});
}
initFirstChild() {
return new FormGroup({
sdkTitle: new FormControl(''),
sdkId: new FormControl(''),
sdkresourceId: new FormControl(''),
sdkdescription: new FormControl(''),
sdkimageName: new FormControl(''),
ads: new FormArray([
this.initSecondChild(),
]),
});
}
private initSecondChild() {
return new FormGroup({
adTitle: new FormControl(''),
adTag: new FormControl(''),
});
}
onSubmit(form) {
console.log('OnSubmit');
console.log(this.sdklist.value);//Values are printed in console.
var newSDKCollection : SDKCollection = this.sdklist.value;//SDKCollection is my data class
console.log(newSDKCollection.sdkTitle);//value coming as null
console.log(newSDKCollection.sdkId);//value coming as null
}
}
//SDKCollection pojo
export class SDKCollection{
sdkTitle : string;
sdkId : string;
sdkresourceId : string;
sdkdescription : string;
ads : {
[key : string] : ads
}
}
//ads pojo
export class ads{
adTitle: string;
adTag: string;
}
我的angular版本如下
因为我得到的值低于 null,所以我无法将此模型 class 发送到我的后端并继续。
console.log(newSDKCollection.sdkTitle);//value coming as null
console.log(newSDKCollection.sdkId);//value coming as null
this.sdklist.value 的控制台日志正确显示值:
我错过了什么!
您必须使用 this.sdklist.getRawValue()
而不是 this.sdklist.value
。
所以我想出了解决这个问题需要做些什么。
我引入了一个相同目标类型的新对象。并抄下这些值。喜欢以下并能够继续。
export class CreatesdklistComponent implements OnInit {
...
sdklist: FormGroup;
newSDKMainCollection : SDKMainCollection = {} as any;
...
onSubmit() {
console.log('OnSubmit');
this.sdkCollectionModel = this.sdklist.get('SDKCollection').value;
this.newSDKMainCollection.sdkCollectionName = this.sdkSetName;
this.newSDKMainCollection.sdkCollection = this.sdkCollectionModel;
//This displays all the required data correctly.
console.log(this.newSDKMainCollection);
}
}
不知道为什么在没有引入新对象的情况下这不起作用。
怀疑这个问题是不是由于动态创建表单造成的。
我在 Angular.
中使用 Reactive Forms 创建了动态表单能够动态删除和创建字段。
但是当尝试通过 onSubmit 获取提交表单的值时,我在模型 classes.
中得到空值 export class CreateListComponent implements OnInit {
sdklist: FormGroup;
ngOnInit() {
this.sdklist = new FormGroup({
SDKCollection: new FormArray([
this.initFirstChild(),
]),
});
}
initFirstChild() {
return new FormGroup({
sdkTitle: new FormControl(''),
sdkId: new FormControl(''),
sdkresourceId: new FormControl(''),
sdkdescription: new FormControl(''),
sdkimageName: new FormControl(''),
ads: new FormArray([
this.initSecondChild(),
]),
});
}
private initSecondChild() {
return new FormGroup({
adTitle: new FormControl(''),
adTag: new FormControl(''),
});
}
onSubmit(form) {
console.log('OnSubmit');
console.log(this.sdklist.value);//Values are printed in console.
var newSDKCollection : SDKCollection = this.sdklist.value;//SDKCollection is my data class
console.log(newSDKCollection.sdkTitle);//value coming as null
console.log(newSDKCollection.sdkId);//value coming as null
}
}
//SDKCollection pojo
export class SDKCollection{
sdkTitle : string;
sdkId : string;
sdkresourceId : string;
sdkdescription : string;
ads : {
[key : string] : ads
}
}
//ads pojo
export class ads{
adTitle: string;
adTag: string;
}
我的angular版本如下
因为我得到的值低于 null,所以我无法将此模型 class 发送到我的后端并继续。
console.log(newSDKCollection.sdkTitle);//value coming as null
console.log(newSDKCollection.sdkId);//value coming as null
this.sdklist.value 的控制台日志正确显示值:
我错过了什么!
您必须使用 this.sdklist.getRawValue()
而不是 this.sdklist.value
。
所以我想出了解决这个问题需要做些什么。
我引入了一个相同目标类型的新对象。并抄下这些值。喜欢以下并能够继续。
export class CreatesdklistComponent implements OnInit {
...
sdklist: FormGroup;
newSDKMainCollection : SDKMainCollection = {} as any;
...
onSubmit() {
console.log('OnSubmit');
this.sdkCollectionModel = this.sdklist.get('SDKCollection').value;
this.newSDKMainCollection.sdkCollectionName = this.sdkSetName;
this.newSDKMainCollection.sdkCollection = this.sdkCollectionModel;
//This displays all the required data correctly.
console.log(this.newSDKMainCollection);
}
}
不知道为什么在没有引入新对象的情况下这不起作用。 怀疑这个问题是不是由于动态创建表单造成的。