如何在获取请求的结果列表中按用户确定已经喜欢的项目

时间:2019-04-01 17:04:44

标签: angular

对于GET请求,我想通过使用每个对象的ID确定哪些结果已被当前用户收藏或喜欢。我有一项服务,该服务确定用户是否已经喜欢某个对象,但是页面上有多个项目,则“喜欢/收藏”状态设置为最后结果的布尔值。我在前端使用* ngFor来遍历项目,所以有没有一种方法可以为每个喜欢的/不喜欢的布尔值设置布尔值?

基本上,我一直在循环浏览,可以验证收藏的服务是否正常运行,但是每个结果都设置为列表中最后一项的布尔值,而不是保留自己的收藏?状态。

HTML:

 <div fxFlex *ngIf="houses" class="col-md-12">
  <mat-grid-list cols="1" rowHeight="16:5" >
    <mat-grid-tile *ngFor="let house of houses"  class="tile">  
              <h4 {{house.address | uppercase}} </h4>
        <button mat-button 
                    (click)="addToFavorites(house._id)"><span class=" 
                     {{like ? 'fas fa-heart' : 'far fa-heart'}}"></span> 
                    </button>
            </mat-grid-tile>
     </mat-grid-list> 
  </div>

通过我的组件:

  this.houseService.getHouses()
       .subscribe((houses) => {
        this.houses = houses;
                  houses.forEach(function(houseStruct, i) {
                    liked = false;
                    var house = this.houses[i]._id;
                    var liked = this.houses[i].liked;

                    this.likesService.isLike(house)
                    .subscribe(resp => { console.log(resp);
                      this.like = <boolean>resp.exists;

                    if (this.like) {
                      liked = true;
                    } else {
                      liked = false;
                    }
                })
              });

每次HTML遍历房屋之类的东西吗?每个房屋都应保持自己的“喜欢”状态,但是所有房屋都将获得“喜欢”的最终结果。 谢谢!

1 个答案:

答案 0 :(得分:0)

设置Task.Run时,将为所有项目设置该值。 this.like是指包含循环的单个组件。

您需要为每个项目设置一个值,然后在循环中使用该值,例如设置this,然后在绑定中使用它。