Angular NG0201错误求助:无法找到t的提供者
解决Angular自定义指令的NG0201依赖注入错误
这个NG0201错误本质是Angular的依赖注入系统找不到指令构造函数中某个服务的提供者——因为代码被压缩混淆了,所以错误信息里显示的t其实对应你指令里的ConfigurationService或者PermissionService。
问题根源
你的EnvironmentPermissionDirective构造函数注入了两个服务:ConfigurationService和PermissionService,但这两个服务没有在任何模块的providers数组中注册,也没有通过@Injectable()的providedIn配置全局提供。Angular无法找到它们的实例,所以抛出了找不到提供者的错误。
解决方案
你有两种方式来修复这个问题:
方案1:全局注册服务(推荐)
修改ConfigurationService和PermissionService的装饰器,使用providedIn: 'root'让Angular在根注入器中提供它们,这样整个应用都能访问到:
@Injectable({ providedIn: 'root' // 全局注册服务 }) export class ConfigurationService { // 你的服务实现代码 } @Injectable({ providedIn: 'root' }) export class PermissionService { // 你的服务实现代码 }
方案2:模块级注册服务
如果这两个服务只在特定模块范围内使用,可以在SharedModule的providers数组中添加它们(因为你的指令在SharedModule中声明,AssetsModule又导入了SharedModule):
@NgModule({ declarations: [ // ...其他组件/指令 EnvironmentPermissionDirective ], imports: [/* ... */], exports: [ // ...其他导出项 EnvironmentPermissionDirective ], providers: [ DatePipe, DecimalPipe, // 添加这两个缺失的服务提供者 ConfigurationService, PermissionService, // ...其他已有提供者 ], }) export class SharedModule { }
额外优化建议
另外,注意你的指令中combineLatest的订阅没有取消,可能会导致内存泄漏。建议添加ngOnDestroy钩子,用takeUntil来管理订阅生命周期:
export class EnvironmentPermissionDirective implements OnDestroy { private permission$ = new BehaviorSubject<string>(null); private destroy$ = new Subject<void>(); @Input() set appEnvPermission(permission: string) { this.permission$.next(permission); } constructor( templateRef: TemplateRef<any>, viewContainer: ViewContainerRef, configService: ConfigurationService, permissionService: PermissionService, ) { combineLatest([configService.getEnvironment(), this.permission$ ]) .pipe(takeUntil(this.destroy$)) // 用takeUntil自动取消订阅 .subscribe({ next: ([ env, permission ]) => { viewContainer.clear(); if (permissionService.hasEnvPermission(env.name, permission)) { viewContainer.createEmbeddedView(templateRef); } }, error: err => { viewContainer.clear(); }, }); } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } }
内容的提问来源于stack exchange,提问作者fritz6
相关产品推荐
相关产品推荐

