У меня есть компонент, который я использовал для подписки и после подписанного метода и отменил подписку на подписанный метод, чтобы избежать утечки памяти
Сервисный код
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 Subscription": prototype, EMPTY и свойство "unsubscribe" не существует для типа "typeof Subscription". Как решить эту проблему???
1 ответ
Вы назначаете 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();
}