【问题标题】:Angular2 ngfor index which ignores rows not shown using ngifAngular2 ngfor 索引忽略未使用 ngif 显示的行
【发布时间】:2018-09-09 06:21:15
【问题描述】:

您好,提前感谢您的帮助。

我的 Angular 应用程序中有一个 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>

【问题讨论】:

  • 请显示代码、您尝试过的内容以及问题所在。
  • 你不需要ngIf,使用ngClass进行高亮,见stackoverflow.com/questions/36375686/…
  • @Alex 在上面添加了代码
  • @Turo 我不希望 ngif 突出显示,它仅用于确定要显示的行。您指出的 ngclass 将用于突出显示,但由于隐藏行而导致索引错误

标签: angular ngfor angular-ng-if


【解决方案1】:

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

【讨论】:

  • 谢谢,但我对 ngIf 的条件与仅用于突出显示的奇数/偶数条件是分开的。那么有什么建议吗?
  • @aks94,请查看工作演示和更新答案:)
  • 是的,有趣的解决方案。只是要等待,以防有这样做的本机方式。如果没有,将接受您的回答。再次感谢
  • @aks94 ,好的 np
  • @aks94,找到了吗?
【解决方案2】:

解决您的问题

我建议将过滤后的数组放入组件中,然后在模板中执行与奇数/偶数相关的逻辑。所以在这里你可以这样做:

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 for 循环,然后根据条件使用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>

【讨论】:

  • @aks94 你也可以根据条件设置ngClass
  • 感谢 Anshuman,但如果您看到我上面的示例,我想显示索引,因为某些行没有显示。 Vivek 的解决方案可以做到这一点,但与其说是原生功能,不如说是一种解决方法。想知道是否有更清洁的实施方式
猜你喜欢
  • 2017-08-22
  • 2017-12-10
  • 1970-01-01
  • 2016-07-11
  • 2016-10-25
  • 2021-04-28
  • 2018-07-23
  • 2020-02-24
  • 2017-05-24
相关资源
最近更新 更多