【问题标题】:Angular FormArray invalid not marks form as invalidAngular FormArray 无效不将表单标记为无效
【发布时间】:2020-10-06 12:36:20
【问题描述】:

我有一个表单,其中一个控件是 formGroups 的 formArray。我将自定义验证器设置为 formGroups 中的一些控件。验证器工作正常,如果我在某些控件无效时检查 formArray 的有效性状态,则 formArray 也无效。但问题是,虽然 formArray 的状态无效,但表单的状态却是有效的。

就像表单忽略了formArray控件的状态。

这就是它的工作方式?

【问题讨论】:

    标签: angular validation


    【解决方案1】:

    据我所知,FormArray 确实评估了它的子组,它只是没有收到有关更新或有效性更改的通知。但是您可以手动执行此操作,例如将 FormGroups 更改事件传播到数组上。

    只是一个未经测试的草图,但应该是这样的。

    const formGroup1: FormGroup = this._formBuilder.group({
      element: [null, [Validators.required]],
    });
    
    const formArray: FormArray = this._formBuilder.array([
      formGroup1
    ]);
    
    // the controls should be an array of formGroups here.
    const valueSubscription: Subscription = this.formArray.controls[0].valueChanges.subscribe(() => { 
      this.formArray.updateValueAndValidity();
    }
    

    【讨论】:

    • 谢谢。我使用表单数组解决了这个问题,就好像它在不同的表单中一样,它工作得很好。我必须检查与其他表单控件隔离的 formArray 有效性状态。我还订阅了 formArray 控件的 valueChanges。在您的示例中,它将是 const valueSubscription: Subscription = this.formArray.valueChanges.subscribe(() => { this.formArray.updateValueAndValidity(); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2011-10-25
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多