使用ngFor

时间:2018-04-16 00:41:34

标签: angular

我想根据一些预定义的数组数据分别为每个标签分配组件。我试图通过在html模板中使用ngFor迭代来做到这一点。 但是目前我不能通过迭代器指定组件到div。有什么方法可以解决这个问题吗?

以下是我正在尝试做的事情。

1 个答案:

答案 0 :(得分:0)

您可以通过自定义指令实现此功能,以引用元素 viewContainerRef

HTML

<mat-card>
  <mat-card-content>
    <mat-tab-group>
      <mat-tab *ngFor="let item of menulist[0].menus" [label]="item.label">
        <ng-container add-comp [comp]="item.component"></ng-container>
      </mat-tab>
    </mat-tab-group>
  </mat-card-content>
</mat-card> 

指令

import { Directive, Type, ViewContainerRef, Input, ComponentFactoryResolver } from '@angular/core';

@Directive({
  selector: '[add-comp]',
})
export class AddDirective {

  @Input('comp') comp : Type<any>
  constructor(public viewContainerRef: ViewContainerRef,
  public componentFactoryResolver:ComponentFactoryResolver) {

   }

   ngAfterViewInit(){
     let componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.comp);
     this.viewContainerRef.clear();
     this.viewContainerRef.createComponent(componentFactory);
   }
}

请参阅堆栈闪电战链接,了解在component和main.ts文件中所做的更改 https://stackblitz.com/edit/angular-ranet6-m9pp7j?file=app%2FaddComp.directive.ts