我有多个模块,每个模块包含各种组件,以及需要包含其中一个组件的父组件。
由于我无法使用路由来实现这一点,因此我创建了一个服务,该服务给出moduleName :string
和compomnentName : string
返回相应的组件类。
请参阅this stackblitz中的ComponentDirectoryService
。
我在模仿路由器模块如何允许功能模块注入自己的路由:
ComponentDirectoryModule
有一个forRoot
和forChild
方法,DIRECTORY_ENTRIES
值传递给forChild
以提供其DIRECTORY_ENTRIES
forRoot
,其中ComponentDirectoryService
传递累计(调用forChild
)值DIRECTORY_ENTRIES
开发模式下一切正常。
在生产模式中一切正常,但我收到了这个可怕的警告:
无法在... component-directory.service.ts :(?)中解析ComponentDirectoryService的所有参数。这将成为Angular v6.x中的错误
让我感到困惑的是,服务的唯一参数是目录条目......
编辑1
与Angular一样,声明了ROUTES注入令牌:
export const ROUTES = new InjectionToken<Route[][]>('ROUTES');
我也是DIRECTORY_ENTRIES:
export const DIRECTORY_ENTRIES = new InjectionToken<ComponentDirectoryEntry[][]>('DIRECTORY_ENTRIES');
答案 0 :(得分:1)
编译器错过了有关实际注入服务的内容的信息。
这就是为什么你需要明确使用@Inject(<YOUR_INJECTION_TOKEN>)
装饰器来指出:
constructor(@Inject(DIRECTORY_ENTRIES) private entries: ComponentDirectoryEntry[]) { }
这将在内部将元数据标志设置为属性entries
,并使用此元数据Angular将知道应在此处注入DIRECTORY_ENTRIES
。