【问题标题】:How to validate multiple select boxes in typescript如何验证打字稿中的多个选择框
【发布时间】:2021-11-21 09:49:39
【问题描述】:

这是场景。我有大量包含产品信息的数据。该产品有各种可用的选项,而无需选择所有选项,用户不应被允许将产品添加到购物车或购买。这是我尝试过的代码。

this.form = new FormGroup({
    'options': new FormControl(null, [Validators.required]),
});

这很好用,但是在只选择了一个选项后,用户可以点击添加到购物车按钮,我想限制该功能。我想我需要实现formArray。但我被困在这里。如有任何帮助,我将不胜感激。

这里是stackblitz了解更多详情

【问题讨论】:

  • 这是你要找的stackblitz.com/edit/…
  • 如果有任何遗漏,请告诉我。您的预期输出是 fromGroup 吗?如果您确认,我会添加答案
  • 当然,我会在一小时内查一下,然后再回复。感谢您的时间和精力
  • 一切正常,除了我从 API 获得选项,但我们正在启动 onInit 上的控件,无论如何我们可以设置异步函数吗?
  • 分享你在组件中使用服务获取选项的代码

标签: angular typescript validation ionic-framework angular-forms


【解决方案1】:

将表单初始化为

  initForm() {
    this.form = new FormGroup({
      options: new FormArray([]),
    });
  }

获取或设置选项的辅助方法

  set setOptionsFA(controls: FormControl[]) {
    controls.forEach((control) => this.optionsFA.push(control));
  }

  get optionsFA(): FormArray {
    return this.form.get('options') as FormArray;
  }

  get optionsControls(): FormControl[] {
    return this.optionsFA.controls as FormControl[];
  }

从您的选项列表中创建FormControl[] 的方法

  createOptionControls(options: any[]): FormControl[] {
    return options.map(
      (_) => new FormControl(null, Validators.required)
    ) as FormControl[];
  }

使用RxJs tap 操作符调用createOptionsControls 方法并将选项传递给它并设置FormArray选项

 this.appService
  .productDetail(247)
  .pipe(
    tap(
      ({ options }) =>
        (this.setOptionsFA = this.createOptionControls(options))
    )
  )
  .subscribe((res) => {
    this.data = res;
  });

Angular Demo

【讨论】:

  • 我收到 ERROR TypeError: control.registerOnChange is not a function 这个错误,但它在 stackblitz 中工作,可能是什么问题。虽然我提到了这个stackoverflow.com/questions/41474011/…
  • 错误在哪一行?你能在 stackblitz 上生产吗?你的角度版本是什么?您是否在 [formControl]="optionsControls[i]" 之类的模板中进行了更新
  • 我正在使用angular 11.2.0,如果我能做到stackblitz,我会试试
  • 问题解决了吗?
  • 是的,很抱歉忘记通知您。谢谢顺便说一句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2017-12-01
  • 1970-01-01
  • 2015-07-30
相关资源
最近更新 更多