角度动态分量解析器

angular5 dynamic component resolver

我有多个模块,每个模块都包含各种组件,还有一个父组件需要包含这些组件之一。

由于我无法使用路由来实现这一点,因此我编写了一个服务,它给出了 moduleName :stringcompomnentName : string returns 相应的组件 class.

参见 this stackblitz 中的 ComponentDirectoryService

我在模仿路由模块如何让功能模块注入自己的路由:

在开发模式下一切正常。

在生产模式下一切正常,但我收到这个可怕的警告:

无法解析 ...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');

编译器遗漏了有关应该实际注入到您的服务中的信息。

这就是为什么您需要显式使用 @Inject(<YOUR_INJECTION_TOKEN>) 装饰器来指出这一点:

constructor(@Inject(DIRECTORY_ENTRIES) private entries: ComponentDirectoryEntry[]) { }

这将在内部将元数据标志设置为 属性 entries 并且使用此元数据 Angular 将知道应该在此处注入 DIRECTORY_ENTRIES