【问题标题】:how to get angular2 formcontrol parent如何获得angular2 formcontrol父级
【发布时间】:2017-01-15 17:13:24
【问题描述】:

如何在控件的嵌套表单组中获取父表单组。在验证控件时,我需要一个兄弟控件值。这两个控件都是 formgroup 的一部分,formgroup 是 formArray 的一部分。 我知道我们有根,它给出了根元素。如何获得给定表单控件的直接父级。

【问题讨论】:

  • 在您的情况下,FormGroup 应该负责通过引用另一个控件的值来验证一个控件的值。

标签: angular angular2-forms


【解决方案1】:

您可以使用.parent 访问给定FormControl 的父级,就像使用.root 一样。

这是文档:https://angular.io/api/forms/AbstractControl#parent

【讨论】:

  • 出于某种原因,.parent 未定义。 .root 指向在我的情况下没有帮助的主组,因为控件是 2 级深(在数组中,然后在组中)。
【解决方案2】:

我遇到了同样的问题。我们有一个这样的嵌套表单组:

FormGroup1:
 - FormControl1
 - FormControl2
 - FormGroup2
   - FormControl3
   - FormControl4

所以在 FormGroup2.FormControl3 的自定义验证器中,您可以像这样找到 FormGroup1 的根:

export class CustomValidator {
    static FormControl3Valid() {
    return function (input: FormControl) {
      if (!input.root || !input.parent) {
        return null;
      }

      const root = input.root as FormGroup;

      if (root.get('FormControl1').value === 'someValue1' &&
        root.get('FormGroup2').get('FormControl4').value === 'someValue2') {
        return { 'required': true };
      }

      return null;
    };
  }
}

请记住,这段代码使一切变得不同:

if (!input.root || !input.parent) {
   return null;
}

在导航到 root 或 parent 之前,您必须检查 FormGroups 是否已创建。

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多