Angular 重置形式的formGroupDirective的用法-角度反应形式

Angular 重置形式的formGroupDirective的用法-角度反应形式,angular,angular-reactive-forms,Angular,Angular Reactive Forms,我试图找到最好的方法来重新设置角度反应形式。我对重置被动表单有点困惑,无法找到哪种方法适用于模板驱动的表单,哪种方法适用于被动表单。 现在我已经使用“formGroupDirective”来重置,但我得到了如下控制台错误。 这就是我使用formGroupDirective进行重置的方式 模板文件: 如果您正在处理被动表单,那么应该已经在组件中为表单定义了一个FormGroup。使用重置。在这种情况下,没有理由使用模板引用变量 这是我的一个: ngOnInit(): void {

我试图找到最好的方法来重新设置角度反应形式。我对重置被动表单有点困惑,无法找到哪种方法适用于模板驱动的表单,哪种方法适用于被动表单。 现在我已经使用“formGroupDirective”来重置,但我得到了如下控制台错误。

这就是我使用formGroupDirective进行重置的方式

模板文件:


如果您正在处理被动表单,那么应该已经在组件中为表单定义了一个FormGroup。使用重置。在这种情况下,没有理由使用模板引用变量

这是我的一个:

  ngOnInit(): void {
    this.productForm = this.fb.group({
      productName: ['', [Validators.required,
                         Validators.minLength(3),
                         Validators.maxLength(50)]],
      productCode: ['', Validators.required],
      tags: this.fb.array([]),
      description: ''
    });
  }

  displayProduct(product: Product): void {
    if (this.productForm) {
      this.productForm.reset();
    }
    // ...
  }
我在属性productForm中定义表单组,然后使用该属性调用reset

每次用户选择要编辑的不同产品时,都会调用My displayProduct方法。它将重置表单并使用所选产品的数据重新填充表单

此语法:

#formDirective="formGroupDirective" 
是散列所指示的模板引用变量。这通常在模板驱动的表单中用于访问表单组,因为表单组在代码中的定义与反应式表单不同

被动表单中的FormGroupDirective将HTML中的表单元素绑定到组件代码中定义的表单组

我的看起来像这样:

<form novalidate
      (ngSubmit)="saveProduct()"
      [formGroup]="productForm">
@ViewChild(FormGroupDirective) formRef: FormGroupDirective;

请注意[formGroup]如果您正在处理被动表单,那么您应该已经在组件中为表单定义了一个formGroup。使用重置。在这种情况下,没有理由使用模板引用变量

这是我的一个:

  ngOnInit(): void {
    this.productForm = this.fb.group({
      productName: ['', [Validators.required,
                         Validators.minLength(3),
                         Validators.maxLength(50)]],
      productCode: ['', Validators.required],
      tags: this.fb.array([]),
      description: ''
    });
  }

  displayProduct(product: Product): void {
    if (this.productForm) {
      this.productForm.reset();
    }
    // ...
  }
我在属性productForm中定义表单组,然后使用该属性调用reset

每次用户选择要编辑的不同产品时,都会调用My displayProduct方法。它将重置表单并使用所选产品的数据重新填充表单

此语法:

#formDirective="formGroupDirective" 
是散列所指示的模板引用变量。这通常在模板驱动的表单中用于访问表单组,因为表单组在代码中的定义与反应式表单不同

被动表单中的FormGroupDirective将HTML中的表单元素绑定到组件代码中定义的表单组

我的看起来像这样:

<form novalidate
      (ngSubmit)="saveProduct()"
      [formGroup]="productForm">
@ViewChild(FormGroupDirective) formRef: FormGroupDirective;

请注意[formGroup]如果您使用的是被动表单,您可以简单地使用formGroup上的reset方法来清除所有表单值,并再次将控件标记为原始控件,正如前面所指出的那样。但是您也可以使用FormGroupDirective来使用resetForm,因为这会将表单的submitted属性标记为false,这是常规reset方法无法做到的

如果使用Angular材质,这尤其有用,因为默认的ErrorStateMatcher将检查表单是否已作为显示表单错误消息的条件之一提交。您可以这样使用它:

<form novalidate
      (ngSubmit)="saveProduct()"
      [formGroup]="productForm">
@ViewChild(FormGroupDirective) formRef: FormGroupDirective;
然后:

this.formRef.resetForm();
无需向HTML添加任何内容


有关更多信息:

如果您使用的是被动表单,您只需使用表单组上的重置方法来清除所有表单值,并再次将控件标记为原始控件,正如前面所指出的那样。但是您也可以使用FormGroupDirective来使用resetForm,因为这会将表单的submitted属性标记为false,这是常规reset方法无法做到的

如果使用Angular材质,这尤其有用,因为默认的ErrorStateMatcher将检查表单是否已作为显示表单错误消息的条件之一提交。您可以这样使用它:

<form novalidate
      (ngSubmit)="saveProduct()"
      [formGroup]="productForm">
@ViewChild(FormGroupDirective) formRef: FormGroupDirective;
然后:

this.formRef.resetForm();
无需向HTML添加任何内容


有关详细信息:

在被动表单中,this.productFrom.reset不会将被动表单重置为原始状态。是的,它会重置表单和控件状态属性:原始、有效、脏等。它不会清除或重置表单值。。。只是国家财产。它对您不起作用吗?它会重置窗体及其值,但在触摸forn并使其无效后,在反应窗体中,this.productFrom.reset不会将反应窗体重置为原始状态。是的,它会重置窗体和控件状态属性:原始、有效、脏等。它不会清除或重置窗体值。。。只是国家财产。它对你不起作用吗?它确实重置了表单及其值,但之后forn被触摸并无效,对我起作用。我喜欢它,因为它是最小的。为我工作。我喜欢它,因为它是最小的。