angular - 在 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
解决方案
您需要通过传入来禁用 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)
推荐阅读
- angular - 如何使用自定义 webpack 构建器调试 Angular CLI 应用程序?
- c - 带有重叠分隔符的 fscanf
- vb.net - 如何根据VB中文本框的内容播放一系列音频文件?
- reactjs - 在 redux-toolkit 中使用 combine reducer 重置嵌套状态的最佳方法
- julia - Flux 中的自定义梯度下降算法
- python - 用诗歌运行一个包 pytest
- python - 将列表的空字符串转换为浮点数
- javascript - 为什么我需要@babel/polyfill,使用 Babel?
- ios - 将数据仅传递给 UINavigation 上的静态故事板嵌入式 tableview 控制器
- laravel - 如何使用自定义分页 laravel?