我有一个使用 DynamicComponentLoader 动态加载另一个组件的组件。然而,动态组件需要注入服务。但是,我不确定如何解决这个问题。我从 Angular.io 文档中看到 DynamicComponentLoader 接受 ResolvedProvider 数组。
我尝试通过以下方式获得提供商:
var provider = provide(ManagerService, {useExisting: ManagerService});
dcl.loadIntoLocation(this.data.template, this.er, "content",[provider]);
这似乎不起作用。你可以看到一个笨蛋的例子 http://plnkr.co/edit/JYLAFRQZjckfxkWEoLon?p=preview.
在 plunker 示例中,您可以看到 Info 组件已加载(因为它不需要该服务),但 Alternate 组件不会加载。
我有点困惑,因为该服务是在根组件中注入的,所以我认为它会在需要时自动注入到每个子组件上。
我如何注入这项服务?
应该和普通的DI没有什么区别
this.dynamicComponentLoader.loadIntoLocation(MyComponent, this.elementRef, "content")
class MyComponent{
constructor(someService:SomeService){}//injected here when instantiated
}
如果动态加载的组件在构造函数中注入服务,那么它的工作方式就像普通的 DI 一样。
确保该服务已在某些提供程序数组中注册。无论是在组件级别还是在链的更高级别(父级或引导程序)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)