【问题标题】:Reset input fields of child component on parent's form submit [duplicate]在父表单提交上重置子组件的输入字段[重复]
【发布时间】:2017-12-27 02:01:05
【问题描述】:

这不是调试问题,我们正在寻找有关该问题的最佳解决方案的概念指导

在我们的Angular 2 app 中,我们有一个

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

我们需要做什么?

  • <button>点击或提交<parent-component><form>上的<parent-component><level-1-child><level-2-child><form>元素

这里是issue re-producible

【问题讨论】:

  • 你在使用 FormBuilder 吗?
  • 您可以在子组件中使用@Input,并根据输入清除表单
  • @Chrillewoodz 我们目前没有使用FormBuilder
  • 嘿,this question 一样吗?
  • 你已经问过这个问题了,为什么还要发帖?

标签: javascript forms angular typescript angular-components


【解决方案1】:

如果没有FormBuilder,则很难进行实际重置,但您可以执行以下操作:

父组件:

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

1 级:

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

2 级:

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

然后只需将@Input() val: any 添加到level-1level-2 组件。

因此,当您“重置”时,您会将myVal 对象重置为其原始值。这也会对孩子产生影响。

旁注:我不确定您是否还必须更新对象引用才能使其生效,但您可以在需要时使用this.myVal = Object.assign({}, this.myVal) 执行此操作。

您还应该在提交时在&lt;form&gt; 标签上调用resetForm。所以像:

<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()重置表单。

【讨论】:

  • 你能举例说明如何使用FormBuilder来重置我们代码中的表单吗?
  • @xameeramir 完成。
  • 我添加了你建议的代码,但是它没有在my Plunker中运行
  • @xameeramir 我可以在星期一看看。
  • 我添加了你建议的代码,由于某些原因它没有在my Plunker中运行
猜你喜欢
  • 2013-03-18
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
相关资源
最近更新 更多