angular中使用formBuilder创建表单,但是前端会根据选择不同,隐藏某些元素,怎么解决?

发布于 2022-09-13 01:17:07 字数 87 浏览 19 评论 0

angular中使用formBuilder创建表单,表单中有十个元素,但是根据表单某一项的选择,某一些元素会被隐藏,没有返回值,表单不能提交,怎么解决这种情况?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你对谁都笑 2022-09-20 01:17:08

暂时的解决方案,只需要在创建表单时,存一个初始值就行

红焚 2022-09-20 01:17:07

真诚地建议你用工作之余找个教程,系统的重头学习一遍。https://www.kancloud.cn/yunzhiclub/angularguide

你这种情况应该使用跨字段验证器,官方文档:https://angular.io/guide/form-validation#cross-field-validation

正好在项目中用到了,简单补充下解决方案:

  /**
   * 设置流动人口相关的表单验证器
   */
  initFloatingValidators() {
    const floatingControl = this.formGroup.get(this.formKeys.floating);
    this.resetFloatingValidators(floatingControl.value);
    this.formGroup.get(this.formKeys.floating).valueChanges.subscribe(value => {
      this.resetFloatingValidators(value);
    });
  }

  /**
   * 重新设置流动人口表单验证验证器
   * @param addValidator true,添加验证器; false, 取消验证器
   */
  resetFloatingValidators(addValidator: boolean) {
    console.log('reset');
    this.formGroup.get(this.formKeys.floatedDate).clearValidators();
    this.formGroup.get(this.formKeys.floatedPlace).clearValidators();
    if (addValidator) {
      this.formGroup.get(this.formKeys.floatedDate).setValidators(Validators.required);
      this.formGroup.get(this.formKeys.floatedPlace).setValidators(Validators.required);
    }
    this.formGroup.get(this.formKeys.floatedDate).updateValueAndValidity();
    this.formGroup.get(this.formKeys.floatedPlace).updateValueAndValidity();
  }

image.png


image.png


image.png


image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文