【问题标题】:Angular 2+ reactive form input required only if in the DOM只有在 DOM 中才需要 Angular 2+ 响应式表单输入
【发布时间】:2019-01-23 10:59:27
【问题描述】:

我目前正在使用 *ngIf 动态生成表单输入,如果此表单在 DOM 中输入我们,则它是必需的输入,但如果不是,则不需要。

如何使用反应式表单方法实现这一点?

HTML

<select formControlName="input" name="input">
   <option value="1">1</option>
   <option value="2">2</option>
</select>

<div *ngIf="input === '2'">
   <textarea formControlName="inputDynamic" name="inputDynamic" type="text"></textarea>
</div>

组件

initApplicants() {
  return this.fb.group({  
    input: ['', Validators.required],
    inputDynamic: ['', Validators.required]
  });
}

如果您需要更多详细信息,请告诉我。

【问题讨论】:

    标签: angular angular-reactive-forms angular-ng-if


    【解决方案1】:

    使用*ngIf 输入将被再次加载/删除,因此是使用模板进行验证的更好方法。

    在这样的元素中设置必需

    <div *ngIf="input === '2'">
       <textarea required formControlName="inputDynamic" name="inputDynamic" type="text"></textarea>
    </div>
    

    并从组件中移除:

    initApplicants() {
      return this.fb.group({  
        input: ['', Validators.required],
        inputDynamic: ['', Validators.required] <===== Remove required from here (used in template)
      });
    } 
    

    【讨论】:

      【解决方案2】:

      如果您想保持响应式方法,您可能希望在应用运行时添加和删除验证器。先订阅更改:

      this.formName.controls['input'].valueChanges().subscribe(value => {
          if (value === 2) {
              //remove validators
          } else {
              //add validators
          }
      });
      

      this.formName.controls['controlName'].setValidators(null) 将删除验证器。 this.formName.controls['controlName'].setValidators(Validators.required) 将添加验证器。

      完成这些操作后不要忘记致电this.formName.controls['controlName'].updateValueAndValidity()

      【讨论】:

      • 嗨亚历克斯,你有这方面的例子让我看看吗?我还不能让它工作。谢谢
      • 只需编写函数,该函数将删除验证器并添加一个验证器。 removeValidator() {this.formName.controls['controlName'].setValidators(null); this.formName.controls['controlName'].updateValueAndValidity();} addValidator(this.formName.controls['controlName'].setValidators(Validators.required); this.formName.controls['controlName'].updateValueAndValidity() ;) {}
      猜你喜欢
      • 1970-01-01
      • 2020-02-27
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 2018-02-03
      • 2022-11-11
      相关资源
      最近更新 更多