我有一个组件,我有一个模态弹出窗口,其中包含子组件:
<modal data-backdrop="static" #modalTask (onDismiss)="modalTask.close()" [size]="'lg'">
<modal-header>
<h4 style="color:#fff">Add CRL Task</h4>
</modal-header>
<modal-body>
<TaskComponent [isReset] ="resetForm" #tasks></crlTask>
</modal-body>
<modal-footer>
<button type="button" class="btn btn-primary" (click)="onTaskClick();">Create</button>
<button type="button" class="btn btn-default" data-dismiss="modal" (click)="modalTask.close();">Cancel</button>
</modal-footer>
</modal>
现在,子组件如下:
<form #taskForm="ngForm" name="rplForm">
//Contains Input Controls
</form>
修改
由于得到了一个解决方案,我将重置放在子组件的ngOnChanges
内。以下是Child组件
taskForm: FormGroup;
@Input() isReset: boolean = false;
ngOnChanges() {
if (this.isReset) {
this.rplForm.reset();
}
}
现在我正在taskForm
保存onTaskClick()
,我能够这样做。我无法做的是重置子组件下的表单。
我尝试使用reset()
,但未能这样做。我可以从父组件中使用哪些东西?
答案 0 :(得分:2)
根据ngOnChanges
提供的更新,您需要使用NgForm
指令,因为您使用的是模板驱动表单。 rplForm
不一个FormGroup
,你甚至不需要它,因为它属于被动形式。所以你要引用的是taskForm
并重置它。 rplForm
在这里是多余的。
您需要导入ViewChild
才能引用您的表单,然后在表单上调用reset
:
import { ViewChild } from '@angular/core';
import { NgForm } from '@angular/forms';
//...
@ViewChild('taskForm') myForm: NgForm;
ngOnChanges() {
if (this.isReset) {
this.myForm.reset();
}
}
答案 1 :(得分:0)
创建主题并将更改事件传递给父组件并监听子组件 例如:
//为此创建一个服务并编写此代码
onFormReset = new Subject<void>();
resetForm(): void {
this.onFormReset.next();
}
// component
reset(): void{
this.service.resetForm();
}
注意。将您的服务注入组件构造函数
//父组件html
<button type="button" class="btn btn-primary" (click)="reset();">Reset</button>
子组件
ngOnInit(): void {
this.service.onFormReset.subscribe(()=>{
reset your form here
);
}
答案 2 :(得分:0)
您需要使用以下输入:
您的父组件打字稿文件:
private resetForm:boolean = false;
您的父组件html文件:
<modal data-backdrop="static" #modalTask (onDismiss)="modalTask.close()" [size]="'lg'">
<modal-header>
<h4 style="color:#fff">Add CRL Task</h4>
</modal-header>
<modal-body>
<TaskComponent #tasks [reset]="resetForm"></crlTask>
</modal-body>
<modal-footer>
<button type="button" class="btn btn-primary" (click)="onTaskClick();">Create</button>
<button type="button" class="btn btn-default" data-dismiss="modal" (click)="modalTask.close();">Cancel</button>
</modal-footer>
您的子组件打字稿:
import {Input, OnChanges} from '@angular/core';
@Input() reset:boolean = false;
ngOnChanges(){
if(this.reset){
//Here you can reset your form
}
}
修改强>
<form #taskForm="ngForm" name="rplForm" [formGroup]="rplForm">
//Contains Input Controls
</form>