【问题标题】:Angular 9 show data change [instantly] without reloadAngular 9 [立即]显示数据更改而无需重新加载
【发布时间】:2020-06-28 13:46:49
【问题描述】:

我想在单击like 按钮时增加我的like 数组长度并减少数据库中的like 长度。这是我的简要代码 like.component.ts

  @Input('isLiked') isLiked: boolean;
  likes: Like[] = [];
  localUser;

  constructor(
    private postService: PostService,
    private postActivity: PostActivityService
  ) {}

  ngOnInit(): void {
    this.localUser = this.postService.getLocalUSer();
    
  }


  like(id) {
    this.postActivity.likePost(id).subscribe((data) => {
      this.likes = data.likes;
      this.isLiked = this.likes.includes(this.localUser._id)
      console.log('liked data', this.likes,this.isLiked);
    });
  }

  disLike(id) {
    this.postActivity.disLike(id).subscribe((data) => {
      this.likes = data.likes;
      this.isLiked = this.likes.includes(this.localUser._id)
      console.log('liked data', this.likes,this.isLiked);
    });
  }

like.component.html

<button  (click)="isLiked ? disLike(p._id) : like(p._id)" mat-button>
  <mat-icon aria-hidden="false"  [color]="isLiked ? 'warn':'primary'" >{{ isLiked ? 'favorite' : 'favorite_border'}}</mat-icon>
  {{p.likes.length}}

  <ng-container *ngIf="p.likes.length===0 || p.likes.length===1; else elseTemplate">
    like
  </ng-container>
  <ng-template #elseTemplate>
    likes
  </ng-template>
</button>

card.component.html

<app-like [p]="p" [isLiked]="p.likes.includes(signUser._id)"></app-like>

活动后服务

 likePost(id) {
    return this.http.put<Mypost>(this.url + '/like', JSON.stringify({ postId: id }), {
      headers: this.headers,
    });
  }


  disLike(id) {
    return this.http.put<Mypost>(this.url + '/unlike', JSON.stringify({ postId: id }), {
      headers: this.headers,
    });
  }

喜欢长度更新

https://i.stack.imgur.com/n2DnQ.gif

【问题讨论】:

    标签: angular angular9 httpservice


    【解决方案1】:

    试试这个,如果你想在更新数组的同时更新视图。

    like(id) {
            this.postActivity.likePost(id).subscribe((data) => {
                this.likes = [...this.likes, data.likes];
                this.isLiked = this.likes.includes(this.localUser._id);
                console.log('liked data', this.likes,this.isLiked);
            });
        }
        
        disLike(id) {
            this.postActivity.disLike(id).subscribe((data) => {
                this.likes = [...this.likes, data.likes];
                this.isLiked = this.likes.includes(this.localUser._id);
                console.log('liked data', this.likes,this.isLiked);
            });
        }
    

    或者,您在这里显示了错误的值,只需显示当前上下文中的值。即 {{likes.length}} 不是 {{p.likes.length}}

    <button  (click)="isLiked ? disLike(p._id) : like(p._id)" mat-button>
      <mat-icon aria-hidden="false"  [color]="isLiked ? 'warn':'primary'" >{{ isLiked ? 'favorite' : 'favorite_border'}}</mat-icon>
      {{likes.length}}
    
      <ng-container *ngIf="p.likes.length===0 || p.likes.length===1; else elseTemplate">
        like
      </ng-container>
      <ng-template #elseTemplate>
        likes
      </ng-template>
    </button>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 2016-02-01
      相关资源
      最近更新 更多