angular - *ngFor 的哪种方法更好 : ng-container or pipe slice?

标签 angular

我想显示完整列表或仅显示其 3 个元素 - 有条件地 (more=true/false)。我可以像这样使用管道方法

<div class="table">
  <div *ngFor="let item of list|slice:0:(more ? undefined : 3 )" class="row">
      {{ item.id }} {{ item.name }}
  <div>
</div>

或者像这样的ng-container方法

<div class="table">
  <ng-container *ngFor="let item of list; index as i">
    <div *ngIf="i<3 || more" class="row">
      {{ item.id }} {{ item.name }}
    </div>
  <ng-container>
</div>

但我不知道:哪种方法在性能方面更好?

更新: 更多关于此案例的信息:How to 'show more' rows using *ngFor

最佳答案

SlicePipe 是一个不纯 管道。这意味着每次在您的组件上运行更改检测时它都会运行。

管道每次调用时都会创建一个新数组,因此如果组件上频繁运行更改检测,它可能会导致垃圾收集过多。

您可以通过创建自己的管道并向其添加日志语句来查看效果:

@Pipe({name: 'myslice', pure: false})
export class MySlicePipe extends SlicePipe {
  transform(value: any, start: number, end?: number): any {
    console.log('Calling MySlicePipe...');
    return super.transform(value, start, end);
  }
}

尝试在使用 myslice 管道时触发组件上的 (click) 处理程序。您会在控制台中看到 Calling MySlicePipe 重复出现,表示每次都会创建一个新数组。 Demo here .

因此,就性能而言,我认为 NgIf 选项更可取。

关于angular - *ngFor 的哪种方法更好 : ng-container or pipe slice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59331157/

相关文章:

Angular 2 单元测试 beforeEachProvider 不注入(inject)服务

Angular Material Button 和 RxJS fromEvent 函数 - 没有 nativeElement 属性,只有 _nativeElement 属性

html - 如何通过数据绑定(bind)设置组件主机名

memory - Angular2 一个非常大的 SPA 内存消耗

node.js - 如何将 Angular(前端)和 Node.js(服务器)应用程序打包在一起

angular - NGX-Mask 对单个输入进行多重屏蔽

java - 无法下载文件 : cannot be resolved to URL because it does not exist with Spring

javascript - Angular 2 HTTP json 请求在尝试解析结果时给我一个奇怪的响应

angular - 在 Ionic3 中使用 Pubnub 为一对一聊天创建 channel

javascript - 无法读取未定义的属性 'post' - Angular 2