首页 > 解决方案 > 补丁值不适用于嵌套输入反应形式Angular 5

问题描述

我正在使用 Angular 5 和响应式表单,mi 表单是使用后端提供的 JSON 动态创建的,有一些特殊的输入嵌套了 3 个级别,并且它与单选按钮配合得很好,但是当输入是一组嵌套复选框,补丁值不改变复选框的值,这是 mi 结构的一个示例

this.cvForm = this._fb.group({
  name: ['', [Validators.required]],
  lastname: ['', [Validators.required]],
  nested: this._fb.group({
    level1: this._fb.group({
       level2: this._fb.group({
          level3: this._fb.group({
             checkbox: [false, Validators.required]
         })
       })
     }),
   }),
 });
}

 this.cvForm 
    .get([
      'nested',
      this.nested,
      'level1',
      this.level1,
      'level2',
      this.level2,
      'level3',
      this.level3,
      'components',
      checkbox
    ]).patchValue({ checked: setValue });

编辑:

我一直在用你们提供的例子做很多测试,我感谢你们的帮助。但是我看到补丁值它没有保存o在第一次单击时更改值,当我在视图更改后单击复选框但表单中的值仍然为false并且第二次单击复选框将表单中的值设置为true ,但是视图发生了变化,基本上补丁值和设置值正在设置值,直到第二次单击表单。我不知道为什么会这样。

标签: angularangular5

解决方案


经过几个小时的研究和测试,我发现 Angular 中的反应形式不支持object.property设置深度级别值的语法,而是我这样做了:

this.cvForm.controls['nested'].controls['level1'].controls['level2'].controls['level3'].controls['checkbox'].value['checked'] = newValue;

这解决了我的问题,谢谢大家的帮助。


推荐阅读