angular - Angular - 为什么每次我发出新值时都会调用 ngOnInit?
问题描述
我的服务中有一个名为refreshSubject$的主题。
private refreshUsers$ = new Subject<User[]>();
每次添加用户时,他都会发出一个新值。
saveUser(user: User[]) {
return this.http.post<User>(this.url, user)
.pipe(
tap(() => {
this.refreshUsers$.next();
})
);
}
我在我的服务上使用 get 方法来检索值
get refresh$() {
return this.refreshUsers$;
}
现在每次我添加一个新用户时,我都会使用next()方法发出一个新值。
this.refreshUsers$.next();
在我的组件内部,我有我的生命周期钩子 ngOnInit,每次refreshUsers$主题发出新值时都会调用他。
ngOnInit(): void {
this.apiService.refresh$.subscribe(() => {
this.getAllUsers();
});
}
为什么每次订阅新值时都会调用 ngOnInit?
解决方案
在 onInit 中,您订阅了您的主题,因此每次您发出新值时,都会运行方法“this.getAllUsers()”。您是否订阅了 OnInit 并不重要。在您取消订阅之前,订阅是有效的。
推荐阅读
- python - 如何在每次按下 tkinter 按钮时打开 PIL 图像?
- colors - 创建彩色 .obj 文件(带颜色的点云)
- android - 彩色 FCM 通知图标
- python - Python 2 到 3 “TypeError:需要一个类似字节的对象,而不是 'str'”
- python - 我不知道代码“[:, row:row]”的含义
- amazon-web-services - 如何设置 lightsail VPC 对等互连?
- docker - 优化图像时 gulp imagimine 插件 throwinf 错误
- mongodb - 为什么我不能使用 redact - mongodb 修剪嵌套数组的元素?
- ionic-framework - 为什么我的画布并不总是显示绘制的图像?
- javascript - 使用ajax发布多个输入