如何在Angle 4+中获取FormControl的完整路径

时间:2018-07-04 13:00:25

标签: angular typescript angular-reactive-forms angular-forms

如何在Angle 4+中获取FormControl的完整路径?

我有反应式:

{
    name: '',
    address: {
        city: '',
        country: ''
    }
}

我需要获得完整的控制权:

const addressFormGroup = this.form.get('address');
const cityControl = addressFormGroup.get('city');
cityControl.plsGiveMeFullPath() //address.city

是否存在获取cityControl完整路径的方法: FormGroup?

1 个答案:

答案 0 :(得分:2)

我实现了这两种方法来获得此功能。

第一个是一个助手,它返回控件的名称(因为它在其父级中被索引)。该函数通过在其父级的controls对象上搜索与您提供的控件相同的控件,然后返回键来实现。

第二个是递归函数,该函数使用上面的帮助程序调用返回控件的名称,并为控件的父级调用自身,并将返回字符串与点('。')连接起来。

  getControlName(c: AbstractControl): string | null {
    if(!c.parent) return null;
    const formGroup = c.parent.controls;
    return Object.keys(formGroup).find(name => c === formGroup[name]) || null;
  }

  getControlPath(c: AbstractControl, path: string): string | null {
    path = this.getControlName(c) + path;

    if(c.parent && this.getControlName(c.parent)) {
      path = "."+path;
      return this.getControlPath(c.parent, path);
    } else {
      return path;
    }

  }