诡异却又天真无邪。
试图通过将前一个表单从 DOM 中切换出来并返回到固定到active
标志的 NgIf 来实现(丢失)表单重置功能
<form *ngIf="active"
(ngSubmit)="onSubmit()" #heroForm="ngForm">
像这样由组件clear
方法控制
clear() {
this.model = new Hero(42, '', '');
this.active = false;
setTimeout(()=> this.active=true, 0);
}
当表单有效时(就像在开始时一样),单击清除会导致页面重新加载。 如果表单无效(例如,没有名称),则不会重新加载。
这是通过plunker的再现:
http://plnkr.co/edit/GNhLbONEDHyApCm9vUeh
清除按钮的类型为“提交”。 所以点击它会导致表单提交。 NgForm 应该拦截提交事件,但是因为 NgIf 从 DOM 中删除了表单元素,所以拦截不会发生。 您可以通过将按钮类型设置为“按钮”来修复它。
谢谢。 我不知道<button>
_没有类型属性_ 与提交按钮相同!
这确实解决了这个修订版 plunker 中的问题: http ://plnkr.co/edit/u3ltLP84JHn2VkoFKf46?p=preview
关闭这个问题并打开#6822,它需要一个明确的reset
功能来替换这个 plunker 说明的黑客。
最有用的评论
清除按钮的类型为“提交”。 所以点击它会导致表单提交。 NgForm 应该拦截提交事件,但是因为 NgIf 从 DOM 中删除了表单元素,所以拦截不会发生。 您可以通过将按钮类型设置为“按钮”来修复它。