你可以看看FormGroupDirective
@Directive({
selector: '[formGroup]',
providers: [formDirectiveProvider],
host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'}, <== reset event
exportAs: 'ngForm'
})
export class FormGroupDirective extends ControlContainer implements Form,
OnChanges {
...
onReset(): void { this.resetForm(); }
resetForm(value: any = undefined): void {
this.form.reset(value);
this._submitted = false;
}
您可以在[formGroup] 上注意到reset 事件,并且它的处理程序正在运行form.reset
由于您的按钮元素具有type="reset",并且您在此元素上有click 事件,并且还绑定了disabled 属性
<button [disabled]="fg.pristine" type="reset" (click)="revert()"
Chrome 和 Firefox 中的行为会有所不同:
https://jsfiddle.net/f1t5khwk/
正如您在上面的示例中看到的那样,单击按钮后您将disabled 属性设置为true,因此Chrome 中的reset 事件不会冒泡,而Firefox 继续捕获reset 事件。
所以你的解决方法是替换
type="reset"
与
type="button"
Modified Plunker