动态组件创建期间无法注入自定义值

时间:2018-12-17 07:17:39

标签: angular

我必须基于每个组件实例化注入自定义值。我不想在创建后将其设置为属性,而是想要进行构造函数注入。

这是我尝试过的

  let customData = {
  p: 1,
  q: 'damean'
};

let injector = Injector.create([{
  provide: CustomData,
  useValue: customData,
  deps: [],
},
]);

console.log('injector at parent level', injector);
let componentRef = this.containerRef.createComponent(factory, 0, injector);

但是,当我在这里查找时,出现一个错误,提示没有提供者注入

错误:NullInjectorError:没有customData的提供者!

public constructor(private injector: Injector) {
  console.log('injector', injector);
  console.log(this.injector.get("customData"));
}

我创建了一个用于测试的stackblitz。任何帮助表示赞赏。 https://stackblitz.com/edit/angular-7wqiiy

2 个答案:

答案 0 :(得分:1)

使用resolveAndCreate()方法,该方法解析提供程序的数组并从这些提供程序创建注入程序。 config参数与@ ngModule.providers

相同
const injector = ReflectiveInjector.resolveAndCreate([
      {
        provide: 'customData',
        useValue: customData
      }
    ]);

然后使用注入装饰器注入

 constructor(@Inject('customData') private customData) {
    console.log(this.customData);   
  }

示例:https://stackblitz.com/edit/angular-d62tcp

答案 1 :(得分:1)

您缺少的是一种类型,请看此example

导入

import { CustomData } from './custom-data'; //into home component

并提供从喷油器获取的类型

 console.log('injector', injector);
 console.log(this.injector.get(CustomData));

Demo