gpt4 book ai didi

angular - 如何将一个 formGroup 添加到另一个 formGroup

转载 作者:太空狗 更新时间:2023-10-29 17:36:03 25 4
gpt4 key购买 nike

我找到了这个答案,它展示了如何将表单控件添加到父表单:

Reuse components in angular2 model driven forms

但我希望能够像这样将新的 formGroup 添加到页面的不同区域。

<form [formGroup]="myForm">
<!--... other inputs -->
<md-tab-group formGroupName="nutrition">
<md-tab formGroupName="calories">
<template md-stretch-tabs="always" md-tab-label>Calories</template>
<template md-tab-content>
<calories></calories> <!-- I want to add controll groups like this-->
</template>
</md-tab>
<md-tab formGroupName="carbs">
<template md-stretch-tabs="always" md-tab-label>Carbs</template>
<template md-tab-content>
<carbs></carbs>
</template>
</md-tab>
</md-tab-group>
</form>

整个表单模型应该是这样的:

{
name: '',
nutrition:{
calories: {
total: ''
// more
},
carbs: {
total: ''
// more
}
}

我已经能够添加 nutrition像这样形成组:

<nutrition [parentForm]="myForm"></nutrition>

import { Component, OnInit, Input } from '@angular/core';
import { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms';

@Component({
selector: 'nutrition',
template: `
<div [formGroup]="parentForm"></div>
`
})
export class NutritionComponent implements OnInit {

@Input() parentForm: FormGroup;

nutritionGroup: FormGroup;

constructor(private _fb: FormBuilder) {
}

ngOnInit() {
this.nutritionGroup = new FormGroup({
blank: new FormControl('', Validators.required)
});
this.parentForm.addControl('nutrition', this.nutritionGroup);
}
}

但我不知道如何传递 nutrition形成组到 calories像这样形成组:

<calories [parentControl]="nutrition"></calories>

import { Component, OnInit, Input } from '@angular/core';
import { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms';

@Component({
selector: 'calories',
template: ``
})
export class CaloriesComponent implements OnInit {

@Input() parentControl: FormGroup;
caloriesForm: FormGroup;

constructor(private _fb: FormBuilder) { }
ngOnInit(){
this.caloriesForm = new FormGroup({
blank: new FormControl('', Validators.required)
});

this.parentControl.addControl('calories', this.caloriesForm);
}
}

这可以做到吗?

最佳答案

如果您(或任何人)仍然感兴趣,在将控件添加到您的 parentControl 之后,您需要将其发送回父组件,以便对其进行更新。

import { Output, EventEmitter } from '@angular/core';

@Output() onFormGroupChange: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();

this.parentControl.addControl('calories', this.caloriesForm);
this.onFormGroupChange.emit(this.parentControl);

在父 html 元素上,您需要将其重新分配回 parentControl:(onFormGroupChange)="setParentControl($event)"

还有你ts上的方法

public setParentControl(formGroup: FormGroup) {
this.myForm = formGroup;
}

然后您将在您的 FormGroup myForm 中拥有控件,并在您的父元素上做任何您喜欢的事情:console.log(this.myForm.controls['calories'])

没有包含所有代码,但只包含您需要的代码:)

关于angular - 如何将一个 formGroup 添加到另一个 formGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com