你也许可以使用Pipe
过滤出。但是,您仍然需要定义它使组件知道它。有一个内置的SlicePipe,这不是你想要的,但非常相似。在此基础上我想你可以使用:
@Pipe({name: 'thirdelement', pure: false})
export class ThirdElementPipe implements PipeTransform {
transform(value: any): any {
if (value == null) return value;
if (!this.supports(value)) {
throw invalidPipeArgumentError(ThirdElementPipe, value);
}
return value.filter((v, i) => (i % 3 == 0));
}
private supports(obj: any): boolean { return typeof obj === 'string' || Array.isArray(obj); }
}
而且使用它像
<md-card class="cardContainer" *ngFor="let viz of visualisationList | thirdelement; let i = index">
甚至更通用的SkipPipe
:
@Pipe({name: 'skip', pure: false})
export class SkipPipeimplements PipeTransform {
transform(value: any, amount: number): any {
if (value == null) return value;
if (!this.supports(value)) {
throw invalidPipeArgumentError(SkipPipe, value);
}
return value.filter((v, i) => (i % amount == 0));
}
private supports(obj: any): boolean { return typeof obj === 'string' || Array.isArray(obj); }
}
这应该是使用像
<md-card class="cardContainer" *ngFor="let viz of visualisationList | skip:3; let i = index">
是的,我知道。想知道是否可以直接在ngFor循环内完成所有操作。我知道你可以将if-then-else条件添加到ngFor循环中,但我还没有看到类似的东西。 – fila