Angular v4手动注入NgControl遇Lint警告:get已废弃,如何正确注入?
在Angular v4中正确注入NgControl以避免Lint警告
嘿,我之前也踩过这个坑!在Angular v4版本里,Injector.get()的调用规则确实做了更新,旧的用法被标记为弃用,所以才会弹出那个Lint警告。咱们直接来解决它:
第一步:确认导入必要依赖
首先确保你已经在组件/指令文件里导入了需要的模块:
import { NgControl, Injector } from '@angular/forms';
第二步:使用Type类型参数调用get方法
Angular v4要求injector.get()的参数必须是**类型对象(TypeInjectionToken<T>,对于NgControl这种Angular内置的表单控件类型,直接传入它的类型本身就可以了。修改后的代码应该是这样:
// 先在构造函数中注入Injector constructor(private injector: Injector) {} // 在需要获取NgControl的位置调用 const ngControl = this.injector.get<NgControl>(NgControl);
这里的<NgControl>是泛型声明,用来让TypeScript正确推断返回值的类型,同时完全符合v4版本的注入规范,Lint警告自然就消失了。
额外推荐:更优雅的构造函数注入方式
如果你是在自定义表单控件中使用NgControl,其实还有更简洁的写法——直接在构造函数里注入它,但记得加上@Self()装饰器来避免循环依赖问题:
import { NgControl, Self } from '@angular/forms'; constructor(@Self() public ngControl: NgControl) { // 这里可以直接使用ngControl实例了,不需要手动通过Injector获取 }
这种方式更符合Angular依赖注入的最佳实践,代码也更整洁。
内容的提问来源于stack exchange,提问作者dzonatan
相关产品推荐
相关产品推荐

