代码之家  ›  专栏  ›  技术社区  ›  Sheldon

通过插值将字符串添加到角度模板中的元素

  •  0
  • Sheldon  · 技术社区  · 7 年前

    假设我的模板中有三个类似的组件

    <app-student-dave></app-student-dave>
    <app-student-olga></app-student-olga>
    <app-student-jason></app-student-jason>
    

    <app-student-{{myArray[selectedName]}}></app-student-{{myArray[selectedName]}}>
    

    2 回复  |  直到 7 年前
        1
  •  2
  •   brijmcq    7 年前

    你可以这样做

    export class StudentComponent {
     @Input() studentName:string;
     //....
    }
    

      <app-student [studentName]="dave"></app-student>
      <app-student [studentName]="olga"></app-student>
      <app-student [studentName]="jason"></app-student>
    

    如果有这样的数组,可以进一步重构

     studentNames:string[] = ['dave','olga','jason'];
    

    并在模板中使用*ngFor。

     <div *ngFor="let studName of studentNames>
          <app-student [studentName]="studName"></app-student>
      </div>
    
        2
  •  1
  •   Vova Bilyachat    7 年前

    在模板中添加

     <ng-template #target></ng-template>
    

    @ViewChild("target", { read: ViewContainerRef }) target;
    
    private createComponent(type: Type<{}>) {
        let compFactory = this.cfr.resolveComponentFactory(type);
        return this.target.createComponent(compFactory);
    }
    
    private init(){
      this.target.clear();
      //loop here 
      var component = this.createComponent(StudentDave);
      //here you can listen component.OnEvent.Subscribe 
      //Or even component.student = {name: "Olga", grade: 2};
    }
    

    但是我认为你的问题有点错了,基本上你应该有1个 StudentComponent 接受@输入学生;因此,您将始终创建相同的组件,但分配不同的输入