Angular 如何获取当前组件可用的服务和指令列表
对于组件Angular 如何获取当前组件可用的服务和指令列表,angular,Angular,对于组件MyDemoComponent @Component({ selector : 'my-demo-component', template : '<div> Demo </div>' }) class MyDemoComponent { }; 现在有什么方法可以让我得到MyDemoModule提供给MyDemoComponent的所有组件、服务和管道的列表 到目前为止,我可以使用ViewContainerRef.parentInjector,这是我一
MyDemoComponent
@Component({
selector : 'my-demo-component',
template : '<div> Demo </div>'
})
class MyDemoComponent { };
现在有什么方法可以让我得到MyDemoModule
提供给MyDemoComponent
的所有组件、服务和管道的列表
到目前为止,我可以使用ViewContainerRef.parentInjector
,这是我一直在寻找的一系列服务。但是,我仍然不知道如何获取MyDemoComponent
中使用的指令和管道列表
我基本上是在尝试创建一个可以动态创建其他组件的组件,类似于。但是,在动态创建的组件视图中,我希望使用在父模块中注册的组件、服务和管道
编辑:我在这里发布代码的相关部分,我提到的列表将帮助我:
export class DynamicComponentCreator {
@Input() html: string;
constructor(private vcRef: ViewContainerRef, private compiler: Compiler) {}
ngOnChanges() {
const html = this.html;
if (!html) return;
@Component({
selector: 'dynamic-comp',
template: html
})
class DynamicHtmlComponent { };
@NgModule({
imports: [CommonModule],
declarations: [DynamicHtmlComponent]
})
class DynamicHtmlModule {}
this.compiler.compileModuleAndAllComponentsAsync(DynamicHtmlModule)
.then(factory => {
const compFactory = factory.componentFactories
.find(x => x.componentType === DynamicHtmlComponent);
const cmpRef = this.vcRef.createComponent(compFactory, 0);
});
}
}
如您所见,我在内部创建的模块无法配置为使用父模块可用的服务/组件/管道。此代码与中的代码略有修改。获取
喷油器
参考很简单:
constructor(private injector:Injector)
{
}
您不需要自己获取组件列表,只要模块配置正确,所有问题都会自动解决
请参阅ComponentFactoryResolver
,ComponentFactory
文档
默认情况下,您不能从组件访问模块实例,但您可以自己提供模块:
{
provide : 'module', //better use OpaqueToken
useExisting: forwardRef(() => AppModule),
}
现在可以将模块注入组件:@inject('module')模块:any
然后使用Reflect metadata package提取模块参数。实际上,我正在尝试动态创建一个组件,如本问题所示:。这里,动态组件被放置在一个动态创建的模块中,该模块无法从上面获取组件/服务/过滤器。。。注入器也会照顾他们吗?更新了问题以更好地解释我所说的。
{
provide : 'module', //better use OpaqueToken
useExisting: forwardRef(() => AppModule),
}