【问题标题】:Angular 7 reactive form patchValue to null after an initial FormGroup fails初始FormGroup失败后,Angular 7反应形式patchValue为null
【发布时间】:2019-06-16 12:04:57
【问题描述】:

我有一个 FormGroup,其中初始数据可能为空,也可能不为空。如果它为 null,FormGroup 将像这样构建:

this.dataForm = this.formBuilder.group({
    prop1: true,
    testGroup: this.formBuilder.group({
      data: null,
      check: { a: "a", b: "b"}
    })
});

如果它不为null,它将像这样构建:

this.dataForm = this.formBuilder.group({
    prop1: true,
    testGroup: this.formBuilder.group({
      data: this.formBuilder.group({ x: 0, y: 1}),
      check: { a: "a", b: "b"}
    })
});

如果我尝试将 data 的值设置为 null(如果它最初不是 null),就会出现问题。

我已经设置了一个 stackblitz here 来演示这个问题。错误是:

无法将 null 转换为对象

基本上,问题是:一旦将属性设置为FormGroup,如何将其设置为null

【问题讨论】:

    标签: angular angular-reactive-forms formgroups


    【解决方案1】:

    这:data: this.formBuilder.group({ x: 0, y: 1}), 正在定义另一个 FormGroup。 “将其设置为空”是什么意思?您想将xy 设置为null?删除 FormGroup?我不确定在您正在创建的 FormGroup 的上下文中“设置为 null”是什么意思。

    假设您的意思是将 FormGroup 中的 FormControls 的 value 设置为 null 值,那么这是可行的:

    changeToNull2() {
      console.log(this.dataForm2);
      console.log(this.dataForm2.get('testGroup').value);
      this.dataForm2.get('testGroup.data').patchValue({
        x: null,
        y: null
      });
    }
    

    如果你想删除data定义的FormGroup,你可以像这样使用removeControl()

      (<FormGroup>this.dataForm2.get('testGroup')).removeControl('data');
    

    更新的 stackblitz 显示两者:https://stackblitz.com/edit/angular-7-reactive-form-validation-aeshez

    更新

    只是为了澄清,在这段代码中:

    this.dataForm = this.formBuilder.group({
        prop1: true,
        testGroup: this.formBuilder.group({
          data: null,
          check: { a: "a", b: "b"}
        })
    });
    

    data 是一个 FormControl,其值默认为 null。

    在这段代码中:

    this.dataForm = this.formBuilder.group({
        prop1: true,
        testGroup: this.formBuilder.group({
          data: this.formBuilder.group({ x: 0, y: 1}),
          check: { a: "a", b: "b"}
        })
    });
    

    data 是一个带有两个 FormControl 的 FormGroup:x,默认值为 0,y,默认值为 1。

    【讨论】:

    • 是的,感谢您的澄清。我的意思是我希望 FormControl 的数据值为空。关键是首先按照您的建议使用removeControl。紧接着,我添加了(&lt;FormGroup&gt;this.dataForm2.get('testGroup')).addControl('data', new FormControl(null));。这会将 data 添加为 FormControl,并将值设置为 null。谢谢!
    猜你喜欢
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2021-02-17
    • 2019-04-24
    • 2021-09-14
    相关资源
    最近更新 更多