gpt4 book ai didi

dependency-injection - Angular 2 : Dynamic Component Loader and injection

转载 作者:太空狗 更新时间:2023-10-29 19:35:49 25 4
gpt4 key购买 nike

我一直在尝试使用 Angular2 中的动态组件加载器。一个问题,可能与此有关:https://github.com/angular/angular/issues/4330 ,似乎是一旦组件加载了 loadIntoLocation() 函数,注入(inject)器就无法找到父组件的注入(inject)器或注入(inject)其中的东西。正如那篇文章所建议的那样,您可以将从父注入(inject)器 (Injector.resolve) 获得的已解析提供程序数组传递到 loadIntoLocation() 的最后一个参数中。

这似乎最初有效,但我还发现动态加载组件的任何 子级 也有同样的问题。 child 的注入(inject)器不知道查找提供者的注入(inject)树,所以在 child 的构造函数中进行标准注入(inject)

   constructor( myComponent: MyComponent)

不起作用。 (动态加载组件的)子项不是动态加载的,而只是使用模板、选择器等“正常”实例化。我想知道:

  1. 这(仍然)是一个已知问题还是我误解了什么?
  2. 如果是已知问题,是否有子级别的解决方法?我尝试了上面的构造函数,还使用了@Host,还使用了 forward ref + @host,但都没有用。是否有另一种方法可以手动将绑定(bind)传递给非动态加载的组件?
  3. 是否有任何其他可能的解决方法?

最佳答案

问题似乎是由传递给 loadToLocation() 的已解析提供程序引起的。 DI 是分层的,DI 尝试通过将层次结构向根部移动来解析所需的类型,但链在 loadToLocation() 处断开,因为传递的是提供程序而不是子注入(inject)器。
动态添加的组件及其子组件只能解析传递给 loadToLocation() 或列在动态添加组件本身(或其子组件之一,如果它)的 providers 列表中的提供程序是实际解析组件的(祖) parent )。

当 DI 从动态插入的树中向上移动以解决依赖关系时,迭代将在 loadToLocation() 添加的组件处停止,因为该组件的注入(inject)器没有父注入(inject)器 (这将是添加动态添加组件的主机组件的注入(inject)器。

另见 https://github.com/angular/angular/issues/5990

关于dependency-injection - Angular 2 : Dynamic Component Loader and injection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35007605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com