通过插值将字符串添加到 angular 模板中的元素
add string by interpolation to element in angular template
假设我的模板中有三个这样的组件
<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]}}>
但是字符串插值不是这样工作的。知道如何在 angular2 及更高版本中实现它吗?
我不确定这种方式是否可行,但我用其他方式做了类似的事情
在模板中添加
<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
来接受@Input 学生;所以你将始终创建相同的组件但分配不同的输入
为什么不使用@Input 来传递学生姓名?
你可以这样做
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>
假设我的模板中有三个这样的组件
<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]}}>
但是字符串插值不是这样工作的。知道如何在 angular2 及更高版本中实现它吗?
我不确定这种方式是否可行,但我用其他方式做了类似的事情
在模板中添加
<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
来接受@Input 学生;所以你将始终创建相同的组件但分配不同的输入
为什么不使用@Input 来传递学生姓名?
你可以这样做
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>