Angular 角数据库中的条件验证问题

Angular 角数据库中的条件验证问题,angular,Angular,我在Angular 9中有一个表单,我想根据下拉框的条件对其进行验证。在我的例子中,表单有一个字段massEmailType,可以有两个值,Farm或Contact。我想要的是,如果用户选择一个农场列表,那么它是一个必填字段 createForm(): FormGroup { return this.fb.group( { emailCampaign: [{value: '', disabled: false}, Validators.requ

我在Angular 9中有一个表单,我想根据下拉框的条件对其进行验证。在我的例子中,表单有一个字段massEmailType,可以有两个值,Farm或Contact。我想要的是,如果用户选择一个农场列表,那么它是一个必填字段

  createForm(): FormGroup {
    return this.fb.group(
        {
            emailCampaign: [{value: '', disabled: false}, Validators.required],
            massEmailType: [{value: '', disabled: false}, Validators.required],
            tractList: ['', RxwebValidators.required({conditionalExpression: 'x => x.massEmailType === "Farm"' })],
            massEmailSender: [{value: '', disabled: false}, Validators.required],
       

        })
}

初始验证有效,因此如果用户选择Contact,它将在不使用tractList中的值的情况下进行验证。但如果用户改变主意回到农场,它仍然会显示表单有效。初始验证后,是否需要执行任何操作以确保任何更改都可能再次使表单无效?

使用rxjs订阅massEmailType控件的更改,并验证该值,并根据该值设置验证程序

  ngOnInit(): void {

    const form = this.createForm()

    form.controls.massEmailType.valueChanges.subscribe((data) => {
      if (data === 'Farm') {
        form.controls.tractList.setValidators([Validators.required]);
      } else {
        form.controls.tractList.setValidators([]);
      }
    });
  }


  createForm(): FormGroup {
    return this.fb.group(
      {
        emailCampaign: [{ value: '', disabled: false }, Validators.required],
        massEmailType: [{ value: '', disabled: false }, Validators.required],
        tractList: [''],
        massEmailSender: [{ value: '', disabled: false }, Validators.required],
      });
  }