您需要将“数据”传递给模态,在“确定”中创建一个patchValue,您可以使用setter来创建表单
例如使用ng-bootstrap modal
你的模态就像
<div [formGroup]="form">
<input formControlName="name">
<input formControlName="surname">
</div>
<button type="button" class="btn btn-outline-dark"
(click)="activeModal.dismiss('Close click')">Cancel</button>
<button type="button" class="btn btn-outline-dark"
(click)="activeModal.close(this.form.value)">Ok</button>
在 NgbModal 中看到,按钮“确定”使用close 函数关闭,并作为参数传递表单的值,而“取消”使用dismiss
您的模态组件具有可变形式(一个 formGroup)和一个作为 setter 的 @Input() data
form:FormGroup
@Input() set data(value)
{
value=value || {name:null,surname:null}
this.form=new FormGroup({
name:new FormControl(value.name),
surname:new FormControl(value.surname)
})
}
您需要的最后一个,当打开模式时,将数据传递给引用,当关闭时使用设置路径
//imagine your form is like
form:FormGroup=new FormGroup({
customer:new FormGroup({
name:new FormControl("Name"),
surname:new FormControl("Surname")
})
})
open() {
const modalRef = this.modalService.open(NgbdModalContent)
//see you pass as data "this.form.value.customer"
modalRef.componentInstance.data = this.form.value.customer;
modalRef.result.then(
(result) => {
//see you use setPath (or setValue)
this.form.get('customer').patchValue(result)
}, (reason) => {
});
}
simple stackblitz
更新 像这样维护有点困难,因为您需要在模态和主组件中创建相同的表单。您可以在文件中创建表单,例如
import { FormGroup, FormControl } from "@angular/forms";
export abstract class Model{
public static getCustomer=getCustomer
}
function getCustomer(value):FormGroup {
value = value || { name: null, surname: null };
return new FormGroup({
name: new FormControl(value.name),
surname: new FormControl(value.surname)
});
}
然后,你导入抽象类 Model
import {Model} from './model-form'
并创建类似的表单
//in main component
form:FormGroup=new FormGroup({
customer:Model.getCustomer({name:"Name",surname:"Surname"})
})
//in modal
@Input() set data(value)
{
this.form=Model.getCustomer(value)
}