【问题标题】:TS/JS break iterative function with for loop insideTS/JS 用 for 循环中断迭代函数
【发布时间】:2018-09-06 09:06:30
【问题描述】:

我遇到了中断迭代循环并在满足条件时返回 false 的问题。

我实际上要做的是检查反应式表单是否为空:

 public isEmpty(form: AbstractControl): boolean {
    if (form instanceof FormGroup) {
      for (const key of Object.keys(form.controls)) {
        if (key !== 'modalite') {
          const control = form.get(key);
          if (control instanceof FormGroup) {
            this.isEmpty2(control);
          } else {
            if (control.value && control.value !== '') {
              return false;
            }
          }
        }
      }
    } else {
      if (form.value && form.value !== '') {
        return false;
      }
    }

    return true;
  }

问题是我的 return false 打破了 for 循环,但之后不断迭代,所以我总是返回 true。我想要做的是,如果一个表单控件不为空,我想返回 false 并打破 for 循环和迭代函数。谢谢。

【问题讨论】:

  • 我看不出您的return false 怎么可能无法突破整个功能。问题可能是 this.isEmpty2(control); 应该替换为 if (!this.isEmpty2(control)) return false; 吗?您是否尝试过使用调试器单步执行代码或添加 console.log 语句来跟踪正在发生的事情?

标签: javascript typescript loops iteration angular-reactive-forms


【解决方案1】:

我认为,最好使用 required 验证器而不是遍历您的控件。

const control = new FormControl('', Validators.required);
console.log(control.value);      // ''
console.log(control.status);     // 'INVALID'

见:https://angular.io/api/forms/FormControl

【讨论】:

  • 我正在检查我的表单和子表单值是否为空,而不是它们是否有效。并非我的所有控件都是必需的。
  • 您可以在需要它的控件上添加 required。通过检查它们是否为空,您的目标是什么?
  • 我有一个用户点击的按钮,如果他在表单中有一些输入,他会得到一个模式,说他将丢失他在表单中输入的所有内容。但如果用户没有在表单中输入任何内容,我不希望该模式显示。
猜你喜欢
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
相关资源
最近更新 更多