从Angular中的自定义表单组件访问FormControl

Slava Fomin II:

我在Angular应用程序中有一个自定义的表单控件组件,该组件实现了ControlValueAccessor接口。

但是,我想访问FormControl与我的组件关联实例。我正在使用反应式表单,FormBuilder并使用formControlName属性提供表单控制

那么,如何FormControl从自定义表单组件内部访问实例?

Slava Fomin II:

该解决方案源于Angular存储库中的讨论如果您对此问题感兴趣,请确保阅读它甚至更好地参与。


我研究了FormControlName指令的代码,这启发了我编写以下解决方案:

@Component({
  selector: 'my-custom-form-component',
  templateUrl: './custom-form-component.html',
  providers: [{
    provide: NG_VALUE_ACCESSOR,
    useExisting: CustomFormComponent,
    multi: true
  }]
})
export class CustomFormComponent implements ControlValueAccessor, OnInit {

  @Input() formControlName: string;

  private control: AbstractControl;


  constructor (
    @Optional() @Host() @SkipSelf()
    private controlContainer: ControlContainer
  ) {
  }


  ngOnInit () {

    if (this.controlContainer) {
      if (this.formControlName) {
        this.control = this.controlContainer.control.get(this.formControlName);
      } else {
        console.warn('Missing FormControlName directive from host element of the component');
      }
    } else {
      console.warn('Can\'t find parent FormGroup directive');
    }

  }

}

我将父FormGroup组件注入组件,然后FormControl使用通过formControlName绑定获得的控件名称从组件获取特定组件

但是,请注意,此解决方案是专门针对FormControlName在主机元素上使用指令的用例量身定制的在其他情况下将无法使用。为此,您将需要添加一些其他逻辑。如果您认为Angular应该解决此问题,请确保访问讨论

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在自定义组件angular 4中访问表单验证

我可以在Angular 2+中访问自定义ControlValueAccessor的formControl吗?

如何在react-admin中访问自定义组件中的表单数据?

角度2:如何在该组件内访问自定义组件的FormControl实例?

在 Angular 中自定义共享组件

访问在组件的scss中定义的自定义主题的原色

Angular2自定义表单验证器无法访问类中的“ this”

自定义角度表单组件中的触发更改事件

自定义表单模板中的Silverstripe访问功能

如何访问Knockout组件中的自定义元素?

在自定义FXML组件Init中访问子级

在AttributeSet中访问自定义组件的attrs

通过自定义 Vue 组件中的方法访问实例

如何访问自定义组件中的数据?

角度:自定义组件中的自定义组件

在 Angular 中创建自定义表单输入

在Angular 2中创建自定义表单控件

Angular中可重用的自定义组件列表

在 Angular 中创建自定义下拉组件

在 Angular 7 中的自定义组件上使用 ngClass

自定义组件中的Angular preSelected选项未显示

如何在组件中使用自定义验证访问表单?

组件中的Aurelia自定义组件

如何在Delphi中为组件正确调用自定义组件编辑器表单

如何检查自定义组件是否从父组件的表单中填充

Angular2中的自定义值访问器

Angular5自定义窗体控件到formControl

Formik-将自定义组件的自定义验证插入到我当前正在使用的Formik表单中

从父组件中的自定义formControl继承验证时,<mat-error>在ControlValueAccessor内部不起作用