*ngFor
是 Angular 框架中的一个结构型指令,用于在模板中迭代数组或对象的元素,并为每个元素创建相应的 DOM 元素。当需要在列表中根据某些条件显示或隐藏元素时,可以结合使用 *ngIf
指令来实现条件渲染。
*ngFor
: 用于迭代数组或对象,并为每个元素生成一个模板实例。*ngIf
: 用于根据表达式的值来添加或移除元素。假设我们有一个商品列表,我们只想显示价格大于 100 的商品:
// 商品列表组件
export class ProductListComponent {
products = [
{ name: 'Product A', price: 50 },
{ name: 'Product B', price: 150 },
{ name: 'Product C', price: 200 }
];
}
<!-- 商品列表模板 -->
<ul>
<li *ngFor="let product of products">
<ng-container *ngIf="product.price > 100">
{{ product.name }} - ${{ product.price }}
</ng-container>
</li>
</ul>
当列表非常大时,频繁的变更检测可能会导致性能下降。
解决方法:
trackBy
函数来优化列表渲染。OnPush
变更检测策略。export class ProductListComponent {
products = [
// ... 同上
];
trackByFn(index: number, product: any): number {
return product.id; // 假设每个商品都有一个唯一的 id
}
}
<ul>
<li *ngFor="let product of products; trackBy: trackByFn">
<ng-container *ngIf="product.price > 100">
{{ product.name }} - ${{ product.price }}
</ng-container>
</li>
</ul>
使用 *ngIf
可能会导致布局抖动,因为元素会根据条件被添加或移除。
解决方法:
ngClass
或 ngStyle
来动态应用样式。<ul>
<li *ngFor="let product of products" [ngClass]="{'hidden': product.price <= 100}">
{{ product.name }} - ${{ product.price }}
</li>
</ul>
.hidden {
display: none;
}
通过上述方法,可以在 Angular 应用中有效地使用 *ngFor
创建条件渲染,同时解决可能遇到的性能和布局问题。
领取专属 10元无门槛券
手把手带您无忧上云