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),
    }