从父组件重置表单

时间:2018-02-08 08:53:22

标签: angular modal-dialog parent-child angular-forms

我有一个组件,我有一个模态弹出窗口,其中包含子组件:

<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(),但未能这样做。我可以从父组件中使用哪些东西?

3 个答案:

答案 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>