如何将表达式作为 Angular2 中的输入传递给组件?
How to pass an expression to a component as an input in Angular2?
我需要将表达式传递给将在组件模板内计算的组件。
例如组件:
@Component({
selector: 'app-my-component',
...
})
export class MyComponent {
@Input items: MyClass;
@Input expression: String;
...
}
使用组件模板:
<div *ngFor="let item of items">
{{expression}}
</div>
MyComponent 的用法:
<app-my-component [items]="listOfItems" [expression]="'[item.id] item.name'">
</app-my-component>
由于会有多个输入,我想避免使用 TemplateRef。
也许以下选项之一可以帮助您:
1) 使用 NgFor 指令的 ngForTemplate
输入 属性:
组件
@Component({
selector: 'app-my-component',
template: `
<div *ngFor="let item of items template: itemTemplate"></div>`
})
export class MyComponent {
@Input() items: any;
@ContentChild(TemplateRef) itemTemplate: TemplateRef<any>;
}
Parent
<app-my-component [items]="listOfItems">
<ng-template let-item>[{{item.id}}] {{item.name}}</ng-template>
</app-my-component>
2) 使用NgTemplateOutlet
指令
组件
@Component({
selector: 'app-my-component',
template: `
<div *ngFor="let item of items">
<ng-template [ngTemplateOutlet]="itemTemplate" [ngTemplateOutletContext]="{ $implicit: item }"></ng-template>
</div>`
})
export class MyComponent {
@Input() items: any;
@ContentChild(TemplateRef) itemTemplate: TemplateRef<any>;
}
Parent保持不变:
<app-my-component [items]="listOfItems">
<ng-template let-item>[{{item.id}}] {{item.name}}</ng-template>
</app-my-component>
这样在 <ng-template let-item>...</ng-template>
内部您可以使用所需的表达式
我需要将表达式传递给将在组件模板内计算的组件。
例如组件:
@Component({
selector: 'app-my-component',
...
})
export class MyComponent {
@Input items: MyClass;
@Input expression: String;
...
}
使用组件模板:
<div *ngFor="let item of items">
{{expression}}
</div>
MyComponent 的用法:
<app-my-component [items]="listOfItems" [expression]="'[item.id] item.name'">
</app-my-component>
由于会有多个输入,我想避免使用 TemplateRef。
也许以下选项之一可以帮助您:
1) 使用 NgFor 指令的 ngForTemplate
输入 属性:
组件
@Component({
selector: 'app-my-component',
template: `
<div *ngFor="let item of items template: itemTemplate"></div>`
})
export class MyComponent {
@Input() items: any;
@ContentChild(TemplateRef) itemTemplate: TemplateRef<any>;
}
Parent
<app-my-component [items]="listOfItems">
<ng-template let-item>[{{item.id}}] {{item.name}}</ng-template>
</app-my-component>
2) 使用NgTemplateOutlet
指令
组件
@Component({
selector: 'app-my-component',
template: `
<div *ngFor="let item of items">
<ng-template [ngTemplateOutlet]="itemTemplate" [ngTemplateOutletContext]="{ $implicit: item }"></ng-template>
</div>`
})
export class MyComponent {
@Input() items: any;
@ContentChild(TemplateRef) itemTemplate: TemplateRef<any>;
}
Parent保持不变:
<app-my-component [items]="listOfItems">
<ng-template let-item>[{{item.id}}] {{item.name}}</ng-template>
</app-my-component>
这样在 <ng-template let-item>...</ng-template>
内部您可以使用所需的表达式