【问题标题】:Like reaction in each element in ionic 3ionic 3中每个元素的类似反应
【发布时间】:2018-11-09 04:22:47
【问题描述】:

我正在使用 ionic 3,并且像使用 ngFor 一样循环离子卡。我想知道当用户单击每个离子卡中的“喜欢/不喜欢”按钮而不重新加载列表时,我该如何与用户做出反应。

<ion-card *ngFor="let u of users">
   <p>{{u.name}}</p>
   <button ion-button [hidden]="u.isliked=='1'" (click)="like(u.id)">like</button>
   <button ion-button [hidden]="u.isliked!='1'" (click)="unlike(u.id)">unlike</button>
</ion-card>

【问题讨论】:

  • 您当前的代码有什么问题?或者如果这段代码运行良好,你想如何“与用户做出反应”?
  • @Ivaro18 我可以喜欢/不喜欢,但是当我点击喜欢按钮时,我需要更改为不喜欢按钮。如果点击不喜欢按钮,需要更改为喜欢按钮,如何在不重新加载列表的情况下做到这一点?

标签: ionic-framework ionic3


【解决方案1】:

您可以使用*ngIf 运算符。这不会像 hidden 属性那样隐藏元素,但实际上会从 DOM 中删除元素。

(将u.isLiked 改为boolean,因为我认为这样更干净,个人喜好。还将(click) 更改为(tap),有关详细信息,请参阅ionic2 tap vs click 上的答案。)

<ion-card *ngFor="let u of users">
   <p>{{u.name}}</p>
   <button ion-button *ngIf="u.isLiked" (tap)="like(u.id)">like</button>
   <button ion-button *ngIf="!u.isliked" (tap)="unlike(u.id)">unlike</button>
</ion-card>

在你的 ts 中:

like(userId) {
  for(let user of this.users) {
    if(user.id == userId) {
        user.isLiked = true;
      }
   }
}

unlike(userId) {
  for(let user of this.users) {
    if(user.id == userId) {
      user.isLiked = false;
    }
  }
}

【讨论】:

  • 如果users数组很大,for循环会不会成为瓶颈?
  • 您可以使用.filter 或其他函数,但for 循环是最快的方法。见jsperf.com/extract-props/1
  • 但我建议不要加载非常大的用户列表,您可能需要查看 ionic 的无限滚动并将您的用户作为碎片列表检索。
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
相关资源
最近更新 更多