在Angular 4应用程序中,我有一个模板驱动的表单,其控件绑定到我的组件中的值。当表单输入更改时,绑定到输入的对象立即更改(双向绑定)。单击取消按钮时,我想撤消对绑定对象的更改。这允许用户更改值然后改变主意并取消他们的更改。
https://plnkr.co/edit/RnnPwtHZY0qTN1H6er0z?p=preview
上面的plunker有一个带有绑定字段的表单来读取hero.name
<h2>{{hero.name}} details!</h2>
绑定到英雄对象的输入。
<form #myForm="ngForm" (ngSubmit)="save(myForm)">
<div class="form-group">
<label>name: </label>
<input name="heroName" [(ngModel)]="hero.name" placeholder="name" />
</div>
<button (click)="cancel(myForm)">Cancel</button>
<button type="submit">Save</button>
</form>
取消按钮调用ngForm的resetForm()方法。
cancel(myForm){
myForm.resetForm();
}
我希望取消按钮将hero.name更改回原始值。这是resetForm()应该如何工作?有不同的方式吗?
答案 0 :(得分:2)
从角度文档中,我想解决方案是使用反应形式而不是模板驱动形式。 https://angular.io/guide/reactive-forms读到(强调:
与反应范式保持一致,该组件保留了 数据模型的不变性,将其视为纯粹的数据源 原始价值观。 而不是直接更新数据模型 组件提取用户更改并将其转发到外部 组件或服务,它们与它们做某事(例如保存 他们)并将新数据模型返回给反映该数据的组件 更新模型状态。
答案 1 :(得分:1)
如果你设置了一个reset()方法,你设置了默认值,那么你可以在需要的时候调用它,就像在ngOninit和reset按钮点击一样:
{{1}}
您可以通过重构重新联合cancel()和reset(),但是如果您在取消中添加其他内容,则可能需要保留它。