Angular 如何在自定义Ng2表单元素中访问NgFormControl
我通过实现Angular 如何在自定义Ng2表单元素中访问NgFormControl,angular,dart,angular2-forms,angular-dart,Angular,Dart,Angular2 Forms,Angular Dart,我通过实现ControlValueAccessor编写了自己的自定义表单元素DateInputComponent,并像这样使用它: <my-date-input ngControl="date"></my-date-input> 据我所知,ngControl是[ngFormControl]=“myControlGroup.controls['date']”的语法糖 现在,在我的DateInputComponent中,我想访问NgFormControl 我试着用@In
ControlValueAccessor
编写了自己的自定义表单元素DateInputComponent
,并像这样使用它:
<my-date-input ngControl="date"></my-date-input>
据我所知,ngControl
是[ngFormControl]=“myControlGroup.controls['date']”的语法糖
现在,在我的DateInputComponent
中,我想访问NgFormControl
我试着用@Input NgFormControl NgFormControl绑定它
但它从未被设置,我尝试用DateInputComponent(NgFormControl-NgFormControl)
注入它,但失败了,因为没有提供程序
正确的方法是什么
(可能我的方法也不对……我希望这个DateInputComponent
能够单独显示可能发生的所有验证错误。)注入指令的方法是正确的,但是问题是,ngControl
可以被认为是NgFormControl的语法糖,但它不是同一个类
所有表单控件都是从NgControl扩展而来的,这就是您应该注入组件的内容<代码>日期输入组件(NgControl NgControl)
所有表单指令都可以互换工作,因此它们都提供NgControl作为它们公开的接口。这允许日期组件的用户使用适用于其用例的任何指令:
:如果他们只是想提供或聆听价值观NgModel
:如果他们想提供控件NgFormControl
:如果他们想在ControlMap中使用字符串标识符(这是您在上面使用的)NgControlName
注射器
并从中读取NgControl
:
类DateInputComponent实现ControlValueAccessor,AfterViewInit{
注入器(u注入器),;
DateInputComponent(该喷油器);
NGC控制;
@凌驾
ngAfterViewInit(){
控制=_injector.get(NgControl.control);
}
}
直接注入NgControl
,正如Ted所建议的那样,不起作用,因为它会导致循环依赖
尝试访问构造函数中的
NgControl
将无法工作,因为它还不可用。ngFormControl来自哪里?正如我所说,据我所知,NgControl=“date”
是分配此属性的语法糖。谢谢。但是当我尝试添加DateInputComponent(NgControl-NgControl)
时,我的应用程序不再编译,说:无法实例化循环依赖项!NgControlName
这是我们使用的一种常见模式,因此它应该是可能的。您可以在这里看到一个示例:您绝对不需要使用喷油器。如果我在代码中看到这一点,那就是代码的味道。