angular - 我在这里有一个组件,我用于订阅和订阅后的方法并取消订阅订阅的方法,以避免内存泄漏
问题描述
服务代码
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();
}
类型“订阅”缺少“类型订阅”类型中的以下属性:原型、空和属性“取消订阅”在类型“订阅”上不存在。如何解决?
解决方案
您正在分配 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();
}
推荐阅读
- serverless-framework - 如何在本地运行 EventGateway 时调用 AWS lambda
- python - 如何为 kmeans 中的集群分配颜色?
- python - 如何使用多线程在python中运行多个函数?
- flutter - 如何在 Flutter 中更改 PopupMenuItem 的背景颜色
- python - 如何使用 os 库获取当前工作目录并在其上写入 .txt 文件?
- ios - 问:当我使用 cordova-plugin-ble-central.I 写在 ios 上但它返回 'null'
- android - HTTPS 在 android 7 中运行良好,但在 android 6 中无法运行 - 使用 ssl 证书
- ionic4 - 找不到名称“SFAuthSession”
- java - 向现有 java POJO 添加新成员变量
- sql-server - 如何在本地导入 csv 文件进行映射但不在当前 SQL Server 中?