У меня есть компонент, который я использовал для подписки и после подписки, и отписался от подписки, чтобы избежать утечки памяти. - PullRequest
0 голосов
/ 04 мая 2020

Сервисный код

private posts: Post[] = [];
  private postsupdated = new Subject<Post[]>();
  getPost() {
    return [...this.posts]
  }
  getPostsUpdatedListener() {
    return this.postsupdated.asObservable()
  }

  addPosts(title: String, content: String) {
    const post: Post = { title: title, content: content }
    this.posts.push(post)
    this.postsupdated.next([...this.posts])
  }
  constructor() { }

код компонента

  Posts: Post[] = [];
  private postsSub = Subscription;
  ngOnInit(): void {
    this.Posts = this.postService.getPost();
    this.postsSub = this.postService.getPostsUpdatedListener()
      .subscribe((posts: Post[]) => {
        this.Posts = posts
      })
  }
  ngOnDestroy() {
    this.postsSub.unsubscribe();
  }

В типе «Подписка» отсутствуют следующие свойства из типа «typeof» Подписка ': prototype, EMPTY и свойство' unsubscribe 'не существует для типа' typeof Subscription '. Как ее решить ???

1 Ответ

0 голосов
/ 04 мая 2020

Вы назначаете postsSub вместо объявления типа

private postsSub: Subscription;

Переписать код:

//Service
private _posts$ = new BehaviourSubject<Post[]>([]);
posts$ = this.posts.asObservable();

  addPosts(title: String, content: String) {
    const post: Post = { title: title, content: content };
    this._posts$.next([...this._posts$.getValue(), post])
  }


 // component
 posts$ = this.postService.posts$;
 _destroy$ = new Subject();

  ngOnInit(): void {
  // just for example, recommend using an async pipe in the template
    this.posts$.pipe(takeUntil(this._destroy$))
      .subscribe((posts: Post[]) => {
        // do whatever
      })
  }

 ngOnDestroy() {
    this._destroy$.next();
  }
...