相关疑难解决方法(0)

动态创建具有ng-content的angular2组件

我想设置<ng-content>动态实例化组件的主体ComponentFactoryResolver.

我看到我可以使用输入和输出访问ComponentRef,但不能设置<ng-content>.

请注意<ng-content>我计划设置可以包含简单文本/可以跨越动态创建的组件

@Component({
    selector: 'app-component-to-project',
    template: `<ng-content></ng-content>`
})
export class ComponentToProject implements AfterContentInit {

    ngAfterContentInit() {
        // We will do something important with content here
    }

}


@Directive({
    selector: 'appProjectionMarker'
})
export class ProjectionMarkerDirective implements OnInit {

    constructor(private viewContainerRef: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver) {
    }

    ngOnInit() {
        const componentFactory: ComponentFactory<ComponentToProject> = this.componentFactoryResolver.resolveComponentFactory(ComponentToProject);
        const componentRef: ComponentRef<ComponentToProject> = this.viewContainerRef.createComponent(componentFactory);
        // Question: How to set content before the child's afterContentInit is invoked …
Run Code Online (Sandbox Code Playgroud)

angular-components angular

12
推荐指数
1
解决办法
6924
查看次数

Angular:如何通过 Injector 在 ngComponentOutlet 中传递数据

我正在尝试动态创建和显示组件,我需要将一些数据传递给它,以便它知道要显示什么。

这是我的代码:

html部分:

<div class="basicContainer">
  <div class="projectsTreeContainer">


    <input type="text" id="searchWord" placeholder="Search through projects"/>

    <button (click)="loadAddProject()">Add new Project</button>

    <app-projects-tree (onLoadProjectDetails)="loadProjectDetails($event)"
                       (onLoadWpDetails)="loadWpDetails($event)"
                       (onSelectAndLoadJobDetails)="loadJobDetails($event)"></app-projects-tree>
  </div>

  <div class="infoContainer">
    <ng-container *ngComponentOutlet="details"></ng-container>
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)

成分:

export class ProjectsComponent implements OnInit {

  details: Component;
  private showWp: boolean;

  constructor() {
  }


  loadProjectDetails(project: BasicProject): void {
     this.details = new ProjectComponent(project);
  }
Run Code Online (Sandbox Code Playgroud)

以及我想要动态创建和显示的组件:

export class ProjectComponent implements OnInit {

  project: Project;

  constructor(basicProject: BasicProject) {
    this.project = new Project();
    this.project.name = basicProject.name ;
  }
Run Code Online (Sandbox Code Playgroud)

Ng 模块:

@NgModule({
  declarations: [
    AppComponent,
    NavbarComponent, …
Run Code Online (Sandbox Code Playgroud)

angular

4
推荐指数
1
解决办法
5161
查看次数

标签 统计

angular ×2

angular-components ×1