Angular 在 ngFor 中获取项目值

Angular get items value in ngFor

当前正在迭代 cart.items。每个项目都有所有者的用户名,我想显示所有者的用户名和我购买的他的产品。问题是我只能遍历 cart.items 而不是所有者的用户名,所以我得到了重复的购物车商品。

我实际上将项目从 parent ngFor 传递到 child 所以我可以获得 items.username.

Parent html:

<ng-container *ngIf="cart.items.length">
    <div *ngFor="let item of cart.items">
        <chlid-component [item]="item"></child-component>
    </div>
</ng-container>

我从我的 cartService 得到 cart.items。

child-component.组件:

@Input() item: ICartItem;
username: string;

getUser() {
    const user = this.userService.getUser(this.item.user).subscribe(
      (user: IUser) => {
        this.username = user.username;
        this.userImage = user.image;
      }
    )
  }

chlid-component.html:

<ng-container *ngIf="(cart$ | async) as cart">
    <div class="avatar">
        <div class="name" routerLink="/users/{{username}}">{{username}}</div>
    </div>
<ng-container *ngFor="let item of cart.items">
    <div class="item" *ngIf="item.user == username">
        // some code here
    </div>               
</ng-container>

我正在从 parent 的项目中获取用户名,以列出我从所有者那里购买的项目。但是有一个问题,我可以从所有者那里购买多件物品,所以它会两次显示所有者的物品。即

User-1:    User-1:   User-2:
item1,     item1,    item3
item2,     item2

在 child-component 中,我正在尝试将 ngFor 值传递给 hashset 并检查该用户名是否已经存在。我如何获得 item.username 值并将其传递给 hashSet 以及是否有适当的方法来实现它。我检查了 console.log,仅 3 个项目就收到了数百个回复。你能建议一个正确的方法来实现它吗?

好的,为了 运行 根据您的需要,我必须按用户名对项目进行分组,我在 ngFor 上使用了 KeyValue 管道,您可以在这里阅读 https://angular.io/api/common/KeyValuePipe

这是更新后的 stackblitz

对项目进行分组

 this.cart.items.forEach((item) => {
  if (!this.groupedItems[item.username]) {
    this.groupedItems[item.username] = [];
  }
  this.groupedItems[item.username].push(item);
});

和显示

<div *ngFor="let group of groupedItems | keyvalue">
  <div class="avatar">
    <div class="name">{{ group.key }}</div>
  </div>

  <div *ngFor="let item of group.value">
    <app-child [item]="item"></app-child>
  </div>
</div>