我必须基于每个组件实例化注入自定义值。我不想在创建后将其设置为属性,而是想要进行构造函数注入。
这是我尝试过的
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
答案 0 :(得分:1)
使用resolveAndCreate()方法,该方法解析提供程序的数组并从这些提供程序创建注入程序。 config参数与@ ngModule.providers
相同const injector = ReflectiveInjector.resolveAndCreate([
{
provide: 'customData',
useValue: customData
}
]);
然后使用注入装饰器注入
constructor(@Inject('customData') private customData) {
console.log(this.customData);
}
答案 1 :(得分:1)