首页 > 解决方案 > 在 FormArray 子上调用 disable() 会重置脏状态

问题描述

在Angular中,我有一个如下形式

  const form = this.fb.group({
      id: 1,
      unique_identifier: "a-b-c-d-e",
      name: "foo",
      last_update: "2020-07-31 12:22:22",
      items: this.fb.array([
        this.fb.group({
          name: "Item 1",
          value: "1",
        }),
      ]),
    });

当我调用form.get('items').markAsDirty()FormArray 的脏属性时,正如预期的那样。

form.get('items').markAsDirty();

console.log(form.get('items').dirty) // = true

之后,当我调用disable()或调用enable()FormArray 的其中一个孩子时,FormArray 的脏属性为假。我没想到

form.get('items').markAsDirty();

console.log(form.get('items').dirty) // = true

form.get('items').at(0).get('value').disable();

console.log(form.get('items').dirty) // = false

有谁知道这是为什么?或者这是 Angular 中的一个错误?

另请参阅 Stackblitz:https ://stackblitz.com/edit/angular-ivy-koyisp?file=src%2Fapp%2Fapp.component.ts

标签: angular

解决方案


您需要通过传入来禁用 FormArray 的特定字段{onlySelf: true}.disable()请参见下面的示例。

(<FormArray>this.form.get('items')).at(0).get('value').disable({onlySelf: true});

console.log(form.get('items').dirty) // = true (should be true now)

推荐阅读