我有一个服务,这个服务应该一直运行到项目启动和关闭。在应用程序(网站)关闭后,服务的ngondestroy方法应该运行。我如何知道服务中的ngondestroy方法是否工作?这个ngondestroy工作吗?
export class UserServiceService implements OnDestroy{
subsc : Subscription
constructor(private auth : AngularFireAuth,private db : AngularFireDatabase,private fnc:AngularFireFunctions,private router : Router,private tostr : ToastrService) {
this.subsc = this.auth.authState.subscribe((user) => {
if (user) {
this.db.database.ref("users/"+user.uid+"/shopCart/").on("value",snap=>{
})
} else {
//not user
}
});
}
ngOnDestroy(): void {
console.log("Closed")
this.subsc.unsubscribe()
this.db.database.ref("users/"+this.currentUserId+"/shopCart/").off()
}
}
3条答案
按热度按时间xvw2m8pv1#
正如@nate-kumar所说,当用户关闭浏览器时,angular不会触发
ngOnDestroy
生命周期钩子。实现此目的的最佳解决方法是使用以下方法:
请找到正在工作的stakblitz here。
wko9yo5t2#
不幸的是,
ngOnDestroy
在浏览器窗口关闭时不会触发,它只在组件/服务/指令被破坏而Angular应用程序仍在运行时触发。如果您需要在浏览器窗口关闭时触发逻辑,一些解决方案涉及到在
window
对象上使用onbeforeunload
挂钩:请参阅ngOnDestroy not firing on page reload
bxgwgixi3#
默认情况下,Angular 服务不使用
ngOnDestroy
,但...在服务中实现
ngOnDestroy
时,可以将其链接到组件ngOnDestroy
。这意味着当组件将销毁
ngOnDestroy
时,服务的ngOnDestroy
也将得到调用。如果您想取消订阅或删除不再需要的数据,这将非常有用。
为了将服务
ngOnDestroy
链接到组件ngOnDestroy
,请将其添加到组件提供程序并在服务中实现ngOnDestroy
。但是对于您提到的情况,请检查此ngOnDestroy not firing on page reload