Angular 2:如何通过FormControl获取FormGroup

6
我能获取FormGroup吗?它是我所拥有的FormControl的父级。 像这样:
    onBlur(formControl: FormControl) {
    var formGroup = formControl.parent // a FormGroup has the FormControl
    if (formControl.dirty) {

        console.log(formControl);
    }

}
3个回答

6

我目前使用的是Angular 5,但我确信在Angular 4上也可以像这样运行:

formControl.parent

例如,在我的代码中,我通过以下方式从同一组中获取其他控件(按名称):

formControl.parent.get(neighbourName)


5
您无法访问FormControl的父级(参见:https://github.com/angular/angular/issues/5635)。但是您可以使用模型驱动表单来访问父级。
 constructor(private fb: FormBuilder) {

 this.form = fb.group({
   name: [],
   address: fb.group({
     city: ['', Validators.required],
     street: ['', Validators.required],
     zipCode: '',
     year: 2016
   }),
   groupDates: fb.group({
     fromDate_g: [''],
     toDate_g: ['', Validators.required]
   }, {validator: Validators.required}),
   dates: fb.group({
     fromDate: '',
     toDate: ''
   })
  });

  let datesGroup =  this.form.controls['dates'] as FormGroup;


}

有一个拉取请求。告诉我你需要这个做什么。我已经成功地为需要FontControl父级访问的机制制定了一些解决方法。 - jmachnik
我正在开发一个具有自动保存表单功能的应用程序。即用户更改的任何控件都会立即发送到服务器。 我更喜欢编写一个通用函数来实现它,因此我的方法是在FormGroup(模型驱动)中存储一些元数据,然后将FormControl发送到函数中,函数会做出正确的决策是否将更新发送到服务器。 这个函数专门用于向服务器更新信息,我更喜欢教导我的团队只需向函数传递一个参数,以减少错误和不一致性。 - Meir Malka
好的。所以订阅由Control提供的可观察对象(它可能是一个组),然后将值传递给函数。我认为这是一种干净的方法。 - jmachnik
我在FormControl的源代码中看到了_parent属性,这是私有的吗?有什么考虑? - Meir Malka

1

它似乎是可能的,但违反了惯例。

 getParentForm(formControl: FormControl): FormGroup {
    return formControl['_parent'];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接