角度动态分量解析器
angular5 dynamic component resolver
我有多个模块,每个模块都包含各种组件,还有一个父组件需要包含这些组件之一。
由于我无法使用路由来实现这一点,因此我编写了一个服务,它给出了 moduleName :string
和 compomnentName : string
returns 相应的组件 class.
参见 this stackblitz 中的 ComponentDirectoryService
。
我在模仿路由模块如何让功能模块注入自己的路由:
ComponentDirectoryModule
有一个 forRoot
和 forChild
方法,DIRECTORY_ENTRIES
值被传递给
- 每个功能模块(stackblitz 中的 p1 和 p2)调用
forChild
以提供其 DIRECTORY_ENTRIES
- AppModule 调用
forRoot
,它提供 ComponentDirectoryService
传递 DIRECTORY_ENTRIES
的累积(调用 forChild
)值
在开发模式下一切正常。
在生产模式下一切正常,但我收到这个可怕的警告:
无法解析 ...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
。
我有多个模块,每个模块都包含各种组件,还有一个父组件需要包含这些组件之一。
由于我无法使用路由来实现这一点,因此我编写了一个服务,它给出了 moduleName :string
和 compomnentName : string
returns 相应的组件 class.
参见 this stackblitz 中的 ComponentDirectoryService
。
我在模仿路由模块如何让功能模块注入自己的路由:
ComponentDirectoryModule
有一个forRoot
和forChild
方法,DIRECTORY_ENTRIES
值被传递给- 每个功能模块(stackblitz 中的 p1 和 p2)调用
forChild
以提供其DIRECTORY_ENTRIES
- AppModule 调用
forRoot
,它提供ComponentDirectoryService
传递DIRECTORY_ENTRIES
的累积(调用
forChild
)值
在开发模式下一切正常。
在生产模式下一切正常,但我收到这个可怕的警告:
无法解析 ...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
。