2017-07-21 52 views
0

這不是一個調試的問題,我們正在尋找有關該問題的最佳解決方案的概念指導重置父母的形式子組件的輸入字段提交

在我們Angular 2 app,我們」已經一個

  • <parent-component>具有<form>
  • <form>具有<level-1-child>
  • <level-1-child><level-2-child>
  • <level-2-child><textarea>

我們需要做什麼?

  • 復位<parent-component><form>元素,<level-1-child> & <level-2-child><button>點擊或提交<parent-component><form>

這裏是issue re-producible

+0

你在使用FormBuilder嗎? – Chrillewoodz

+1

您可以在子組件中使用@Input,並根據輸入可以清除表格 – Sreemat

+0

@Chrillewoodz截至目前,我們尚未使用「FormBuilder」。 – xameeramir

回答

2

沒有FormBuilder它很難做到真正的復,但你可以做一些事情:

父組件:

<form> 
    <level-1 [val]="myVal"></level-1> 
</form> 

級別1:

<level-2 [val]="val"></level-2> 

級別2:

<textarea [(ngModel)]="val.someProp"></textarea> 

然後,只需添加@Input() val: anylevel-1level-2組件。

所以,當你「重置」你的myVal對象重置爲初始值。這對兒童也會生效。

旁註:我不確定是否必須更新對象引用以使其生效,但是您可以在需要時使用this.myVal = Object.assign({}, this.myVal)來執行此操作。

你也應該叫resetForm<form>標籤,當您提交。因此,像:

<form #form="ngForm" (ngSubmit)="save()"></form> 

@ViewChild('form') form; 

save(): void { 
    this.form.resetForm() 
} 

編輯:

隨着FormBuilder你會怎麼做:

父組件:

public form: FormGroup = this.fb.group({ 
    someProp: '' 
}); 

<form [formGroup]="form"> 
    <level-1 [val]="form"></level-1> 
</form> 

等級1:

<level-2 [val]="val"></level-2> 

等級2:

<div [formGroup]="val"> 
    <textarea formControlName="someProp"></textarea> 
</div> 

,然後重置形式this.form.reset()

+0

你可以舉一個如何使用FormBuilder來重置代碼中的表單的例子嗎? – xameeramir

+0

@xameeramir完成。 – Chrillewoodz

+0

我添加了您建議的代碼,但它並未在[我的Plunker]中運行(https://plnkr.co/edit/dZvIOdxEb05mKtEPhbgT?p=preview) – xameeramir