在 Angular 2 中使用 ComponentResolver 加载组件时注入不同的提供程序

2023-11-30

我们可以在动态加载组件时注入不同的提供程序吗?

我的组件

  @Component({
     moduleId: module.id,
     selector: "my-component",
     template: "<div>my-component</div>",
     providers: [MyComponentService]
  })
  export class MyComponent{

     constructor(private ds: MyComponentService) {
        super();
     }    
   }

别的地方,

     this._cr.resolveComponent(MyComponent).then(cmpFactory => {
        let instance: any = this.testComponentContainer.createComponent(cmpFactory).instance;
    });

所以在上面的代码中,同时解决MyComponent,为此提供者MyComponentService也会得到解决,我们可以根据一些开关来不同地解决它吗?


ViewContainerRef.createComponent

createComponent(componentFactory: ComponentFactory<C>, index?: number, injector?: Injector, projectableNodes?: any[][]) : ComponentRef<C>

has an injector范围。如果您通过了一项,则该一项将用于解析提供者。我认为您不能覆盖添加到的提供者@Component()不过装饰器。

您可以创建一个新的注入器Injector

let injector = ReflectiveInjector.resolveAndCreate([Car, Engine])

并传递此注入器,或者您可以将注入器注入到调用的组件中ViewContainerRef.createComponent并创建一个子注入器。

constructor(private injector:Injector) {}

Injector是通用基类ReflectiveInjector是一个具体的实现。

let resolvedProviders = ReflectiveInjector.resolve([Car, Engine]);
let child = ReflectiveInjector.fromResolvedProviders(resolvedProviders, this.injector);

这样,当前组件可用的提供程序就会被传递并Car, and Child被添加。因此提供者认为child无法解决(除了Car and Engine)尝试从父注入器解析。

笨蛋的例子

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Angular 2 中使用 ComponentResolver 加载组件时注入不同的提供程序 的相关文章

随机推荐

  • 在 VSTS 上使用 GAC_MSIL 程序集时出现错误

    我有一个 ASP Web 表单项目存储在 VSTS 中 我正在尝试构建它 突然我在构建部分遇到了这个错误 2017 04 18T22 01 20 3859517Z Build FAILED 2017 04 18T22 01 20 38595
  • 对于给定的遍历 gremlin 查询,如何在所有访问过的节点/边上应用静态步骤

    我们将用户权限标记为每个节点和边上的属性 SET 基数 想知道对于给定的遍历 gremlin 查询 在所有访问过的节点 边上应用 has 步骤的最佳方法是什么 就像一个非常简单的遍历查询 从伦敦希思罗机场 LHR 飞往美国机场的航班 g V
  • apply() 并计算所有数据帧行的第一行的比例

    我有一个数据框 如下所示 列出了按车辆类型划分的受伤人数 trqldnum lt data frame motorveh c 796 912 908 880 941 966 989 984 motorcyc c 257 295 326 31
  • 从 UIView 制作 UIImage 但不在主线程中

    我正在使用众所周知的模式来创建一个UIImage从一个UIView UIImage imageWithView UIView view UIGraphicsBeginImageContextWithOptions view bounds s
  • 从远程 Git 存储库检索特定提交

    有没有办法从远程 Git 存储库中仅检索一个特定提交 而不将其克隆到我的 PC 上 远程仓库的结构与我的完全相同 因此不会有任何冲突 但我不知道如何做到这一点 而且我不想克隆那个巨大的存储库 我是git新手 有什么办法吗 从 Git 版本
  • XMLWriter (PHP) 的编码问题

    采用这个简单的 PHP 代码 xmlWriter new XMLWriter xmlWriter gt openURI php output xmlWriter gt startDocument 1 0 utf 8 xmlWriter gt
  • 如何在 C 代码中转到上一行

    如果对于下面的代码 printf HEllo n do not change this line printf b bworld 我需要一个输出 Helloworld 在一行中 但这效果不太好 有人可以解释一下原因吗 以及其他转义序列 如果
  • 如何获取mongodb中子文档之间的日期差异?

    下面是数组 CDF UTILITYTYPE D1 G1 12387835 G22 NAME L1 D5 EVENT CODE 13 TIME 29 05 2022 13 26 00
  • 来自 PreferenceActivity 的 webview.clearCache

    我有preferences xml 它在我的PreferencesActivity 扩展中使用 我在 xml 中有另一个首选项 我想用它来清除 webview 的缓存 它有一个键 但我无法通过按我的首选项中的条目来弄清楚如何触发 webvi
  • 我希望我的 RecyclerView 不回收某些项目

    我正在使用一个RecyclerView里面有异质的景色 如本教程所示 我在 RecyclerView 中有一些项目也是 RecyclerView 太难想象了 假设我想复制 Play 商店的布局 一个大的 RecyclerView 具有垂直线
  • docker 构建期间名称解析失败

    我遇到一个问题 在发出 docker build 命令时收到以下错误 curl 6 Could not resolve host dl yarnpkg com gpg no valid OpenPGP data found 这是我的 Doc
  • iOS 上某些页面的背景图像模糊

    我有一个网站http basement recordings com 使用 wordpress 构建 我对背景图像有一个问题 在 iO 上 在某些页面 例如娱乐和活动 上 背景图像看起来模糊 不清晰 Chrome 和 Safari 上都会出
  • Linux 和 I/O 完成端口?

    使用winsock 您可以将套接字或单独的I O 操作配置为 重叠 这意味着执行 I O 的调用会立即返回 而实际操作则由单独的工作线程异步完成 Winsock 还提供 完成端口 据我了解 完成端口充当句柄 套接字 的多路复用器 如果句柄不
  • 行结束符区别适用于 html 表单吗?

    我知道文件使用的行结尾因操作系统而异 我想知道 如果用户将文本粘贴到 http 表单输入 例如文本区域 中 发送的行结束字符是否以相同的方式取决于操作系统 不 浏览器应该规范行结尾
  • 如何将 CSV 数据文件加载到 R 中以与 quantmod 一起使用

    我是 R 新手 刚刚开始使用它 我目前正在尝试 quantmod 包 quantmod 包似乎可以完成我想做的大部分事情 但是 我不想使用 getSymbols 函数将数据获取到 R 中 相反 我想使用我自己的数据 存储为本地磁盘上的 cs
  • 当滚动窗格包裹文本窗格时,如何防止 JScrollPane 箭头键处理移动插入符

    我有以下要求 我需要一个可滚动的 JTextPane 用户可以在此文本窗格中键入内容 或者可以将用户未键入的文本插入其中 想想类似于 IM 窗口的东西 尽管窗口必须可滚动以允许用户查看先前键入的文本 但插入符号永远不应该从文本末尾的位置移动
  • 解析非预定义参数

    有没有可以在Python中解析sys argv中随机键值对的库 例如 python run py v1 k1 v2 k2 v3 k3 应该返回给我一个像 v1 gt k1 v2 gt k2 v3 gt k3 这样的字典 在编译时我不知道那些
  • 在 IE 中使用 => 时出现语法错误 [重复]

    这个问题在这里已经有答案了 我有以下 JavaScript 代码行 var res Object keys packages filter e gt packages e true 上面的代码在除 IE 之外的所有其他浏览器中都可以正常运行
  • Nifi:如何编写自定义处理器

    我想写nifi处理器 可以从hdfs目录读取xml文件 然后将其数据提取到flowfile属性中 如果有两个 nifi 处理器可以获取该文件并读取数据或向其中写入内容的情况我怎样才能进行文件锁定这样一次只有一个处理器可以使用它 您能给我推荐
  • 在 Angular 2 中使用 ComponentResolver 加载组件时注入不同的提供程序

    我们可以在动态加载组件时注入不同的提供程序吗 我的组件 Component moduleId module id selector my component template div my component div providers M