Angular2 .reset()没有在firefox中重置@Input值

时间:2017-04-08 22:01:26

标签: angular typescript

好的,有浏览器问题而且不确定我是否会遗漏某些内容。这是我的搜索者https://embed.plnkr.co/sStsEL/我的问题是当我编辑订单项并在修改期间点击还原时,Chrome会将我的值设置回数据模型值,但Firefox会擦除所有字段。我错过了什么?也许我应该将其升级为开发者,但有没有针对此的解决方法?如果我在NgOnChanges函数中调用@Input值,我得到正确的数据。屏幕上可以看到所有内容。

1 个答案:

答案 0 :(得分:2)

您可以查看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;
  }

您可以在[{1}}上注意到reset事件并且其处理程序正在运行[formGroup]

由于您的按钮元素包含form.reset且您在此元素上有type="reset"个事件,并且还绑定了click属性

disabled

Chrome和Firefox中的行为会有所不同:

https://jsfiddle.net/f1t5khwk/

正如您在点击按钮后在上面的示例中看到的那样,您将<button [disabled]="fg.pristine" type="reset" (click)="revert()" 属性设置为disabled,因此Chrome中的true事件发生后不会冒泡Firefox继续捕获reset事件。

所以你的解决方法正在取代

reset

type="reset"

<强> Modified Plunker