如何在 Angular 根组件中添加模板?

How to add in Angular a template in the Root Component?

我想在我的 Angular 应用程序中独立于用户当前所在的组件播放背景音乐。为此,我需要在根组件中动态创建一个组件 (musicComponent),而不是在用户单击按钮以激活音乐的子组件中。

@ViewChild('m', {static : false, read: ViewContainerRef }) musicentry: ViewContainerRef;


ngAfterViewInit(){
const factory = this.resolver.resolveComponentFactory(BackgroundMusicComponent);
this.MusicComponentRef = this.musicentry.createComponent(factory);

}

模板:

<template #m></template>

不幸的是,如果模板位于子组件内,则 FactoryResolver 可以工作,但如果模板位于根组件 (app.component.html) 内,则 FactoryResolver 无法工作。

您知道如何在根组件中创建组件吗?谢谢!

你说的是动态组件。你可以试试这个

@Directive({
  selector: '[appAdHost]'
})
export class AdHostDirective {

  constructor(public viewContainerRef:ViewContainerRef) { }
}

在页面上

<ng-template appAdHost></ng-template>

逻辑

  @ViewChild(AdHostDirective) dlHost: AdHostDirective;

  constructor(private cfr: ComponentFactoryResolver) {
  }

  ngAfterViewInit() {
    this.dlHost.viewContainerRef.createComponent(
      this.cfr.resolveComponentFactory(DyTwoComponent)
    );
  }