gpt4 book ai didi

javascript - 如何提高ngFor循环的性能?

转载 作者:行者123 更新时间:2023-11-28 11:45:25 27 4
gpt4 key购买 nike

当 ngFor 应该渲染 7600 个字符串项时,性能非常慢,浏览器会卡住几秒钟。

是否有可能提高 ngFor 的性能?

ng代码:

  <ul *ngIf="isOpen"
class="nano-drop-down-list"
dropdownMenu>
<li class="nano-f-r nano-f-30">
<input [(ngModel)]="searchString"
class="nano-f nano-p-0_10 nano-bc-ws hover-effect"
placeholder="Search..." type="text"/>
</li>

<!-- ngFor which should be improved -->
<li *ngFor="let option of arrayOfOptions | nanoSearchByKey:searchString:displayProperty;"
[ngClass]="{'active':isOptionSelected(option[valueProperty])}"
class="nano-f-r nano-f-30 nano-bc-ws hover-effect">
<button (click)="handleClickOnOption(option[valueProperty]);"
type="button"
class="nano-f-c nano-f nano-p-0_10 nano-overflow-h">
<div class="nano-f-r nano-f">
<span class="nano-m-aaa0 nano-overflow-e">
{{ option[displayProperty] }}
</span>
<div *ngIf="isMultiple"
class="nano-f-r nano-f-30">
<i *ngIf="isOptionSelected(option[valueProperty])"
class="fa fa-check nano-m-a"
aria-hidden="true"></i>
</div>
</div>
</button>
</li>
</ul>

最佳答案

Angular 6 中的

NgForOf 提供了覆盖 track by 函数 ( source ) 的选项。它允许您选择 Angular 应检查更改的属性/条件。

为此,只需向组件添加一个方法,如下所示:

trackByFn(index, item) {
return item.someUniqueIdentifier;
// or if you have no unique identifier:
// return index;
}

而在组件 HTML 中,您将循环更改为

<li *ngFor="let option of arrayOfOptions | nanoSearchByKey:searchString:displayProperty; trackBy: trackByFn"
[ngClass]="{'active':isOptionSelected(option[valueProperty])}"
class="nano-f-r nano-f-30 nano-bc-ws hover-effect">

Angular 会自动将当前索引以及当前项目传递给函数。

Here's一篇很好的文章,提供了更具体的示例和更多信息(感谢 @Pedro Arantes )。

关于javascript - 如何提高ngFor循环的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51324460/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com