您好,并提前感谢您的帮助。
我在我的角度应用程序中有一个ngFor循环,我在其中使用ngIf来确定基于特定条件显示哪些行。因为我不能把ngFor和ngIf放在同一个元素上,所以我的索引不按顺序。
我需要正确的索引(或奇数和偶数),因为我想以交替的方式突出显示行。
任何建议都会非常有用!
****编辑:在下面添加代码作为示例。这就是我想要做的事情。在这个例子中,' a'将是蓝色的,并且' b'并且' d'将是红色的。 ' C'将隐藏,所以颜色的顺序将是蓝色,红色,红色而不是蓝色,红色,蓝色,如我所愿。我的循环并不知道' c'没有显示,所以不知道' d'是一个偶数行。
我对ngIf的条件与奇数/偶数条件分开,后者仅用于突出显示。
<ng-container *ngFor="let letter of ['a','b','c','d']; let odd = odd ; let even = even">
<ng-container *ngIf="letter != 'c">
<div ngClass="{{odd ? 'class-red' : 'class-blue'}}><p>{{a}}</p></div>
</ng-container>
</ng-container>
答案 0 :(得分:1)
为您的问题
我建议将过滤后的数组放入组件中,然后在模板中执行与奇数/偶数相关的逻辑。所以在这里你可以这样做:
<强> component.ts 强>
private _items: any[];
get Items() {
return this._items.filter(item => <your condition>);
}
这只是一个可以根据您的要求优化此代码的方向。
<强> HTML 强>
<ng-container *ngFor="let item of Items; let i = index">
<div [ngClass]="{'even': i%2 == 0}">{{item.name}}</div>
</ng-container>
以前的解决方案
您可以使用ng-container
进行循环,然后根据条件使用hide/show
div
<ng-container *ngFor="let item of Items">
<div *ngIf="item.isValid">Hello {{item.status}}</div>
</ng-container>
如果您想申请CSS,可以执行以下操作:
<ng-container *ngFor="let item of Items; let i = index">
<div [ngClass]="{'even': i%2 == 0}">Hello {{item.status}}</div>
</ng-container>
答案 1 :(得分:0)
Hacky的做法是这样的(不是首选的,但有效):
组件方:
isodd = false;
public get changeOdd(){
this.isodd = !this.isodd;
return true;
}
模板面:
<ng-container *ngFor="let letter of ['a','b','c','d']">
<ng-container *ngIf="letter != 'c' && changeOdd">
<div ngClass="{{isodd ? 'class-red' : 'class-blue'}}">
<p>{{letter}} {{ isodd }}</p>
</div>
</ng-container>
</ng-container>
<强> WORKING DEMO 强>