gpt4 book ai didi

Angular - 如何在注销时清除在服务构造函数上实例化的数据?

转载 作者:太空狗 更新时间:2023-10-29 18:12:59 26 4
gpt4 key购买 nike

我正在使用 GlobalDataService ( referred from here ) 将来自登录 API 的响应数据存储在全局变量上,以用于其他一些 API 调用。

登录():

 if (_token) {

// store username and jwt token in keep user logged in between page refreshes
console.log(this.gd.currentUserData)
this.gd.currentUserData['userID']=_id;
this.gd.currentUserData['username']=username;
this.gd.currentUserData['token']=_token;
// return true to indicate successful login
return true;
}

然后在 xx.service.ts 文件中,我正在访问这个全局变量,如下所示在 constructor() 中显示,然后各种函数使用它来制作API 调用。

constructor(private http: Http,  private gd: GlobalDataService) {

let currentUser = this.gd.currentUserData;

this.token = currentUser && currentUser.token;
this.userID=currentUser.userID;

}

问题

在我注销(在此期间全局变量中的数据被清除)然后使用另一个用户帐户登录后,service.ts 中的函数仍在使用存储在这些全局变量中的先前数据。

内部注销():

this.gd.currentUserData={};
this.gd.currentHospitalData={};

我认为问题在于构造函数仅实例化一次,因此分配给全局变量的新数据未反射(reflect)在 .service.ts 文件中。

我该如何解决这个问题?或者是否有更好的方法来处理这种情况?

注意:之前我使用 localstorage 来存储这些数据,但由于它可以通过 Chrome 开发工具进行修改,所以我现在正在考虑使用全局变量。

更新

我知道这是 hacky 并且不是正确的做法,但我注意到在 logout() 上调用 window.location.reload(); 可以解决问题。

看来,这个问题似乎已经解决了。我必须将我的服务提供者声明从 app.module.ts 移动到应用程序组件中的较低级别,之后成功登录重定向到。

但我仍在寻找处理登录数据的合适解决方案/方法。

最佳答案

真正的问题是我在 app.mopdule.ts 中为我的 .service.ts 声明了 Provider。这导致这些服务的构造函数仅在应用程序首次加载时实例化。因此,当我注销并再次登录时,新分配的数据并未反射(reflect)在那些 .service.ts 文件中,

我将这些服务的提供者声明移动到成功登录后重定向到的组件。现在每次成功登录后,构造函数将实例化,新分配的值将反射(reflect)在那些 .service.ts 文件中。

关于Angular - 如何在注销时清除在服务构造函数上实例化的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47766673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com