Функция «Мне нравится» без перезагрузки страницы NGXS Angular - PullRequest
0 голосов
/ 11 ноября 2019

Я хотел подражать Facebook и другим сайтам, которые, когда вам нравится публикация, не требуют перезагрузки страницы и вызова функции getAllData (). Есть ли способ сделать это в NGXS в Angular?

@Action(LikePost)
  likePost({ patchState, setState, getState }: StateContext<PostStateModel>, { payload }: LikePost) {
    return this.postsService.likePost(payload).pipe(
      tap(() => {
        const state = getState();
        const filteredArray = state.posts.filter(item => item.id !== payload.id);
        setState({
          ...state,
          posts: filteredArray
        });
      }),
      catchError(err => {
        console.log(err);
        return throwError(err);
      })
    );
  }

1 Ответ

0 голосов
/ 12 ноября 2019

Я мог бы предложить решение, используя Subscription из rxjs.

Компонент:

import { Subscription } from 'rxjs/Subscription';

export class SampleComponent implements OnInit {
    subscribers: Array<Subscription> = [];

    constructor(
        private service: Service
    ) {}


    ngOnInit() {
        this.subscribers.push(this.service.onLike().subscribe(() => this. getAllData()));
    }

}

Сервис / Действие (ваш код):

import {Subject } from 'rxjs';
  • Объявить: private likeSubject = new Subject<any>();

  • Добавить finalize(() => { this.refreshSubject.next(); }), внутри вашего tap() до catchError

  • Добавьте следующий метод:

    onLike () {return this.likeSubject.asObservable ();}

...