dev*_*evN 3 typescript angular
我正在使用GlobalDataService(从此处引用)将响应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;
}
Run Code Online (Sandbox Code Playgroud)
然后在内部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;
}
Run Code Online (Sandbox Code Playgroud)
问题
我注销(在此期间清除了全局变量中的数据)然后使用另一个用户帐户登录后,其中的功能service.ts仍在使用存储在那些全局变量中的先前数据。
内部logout():
this.gd.currentUserData={};
this.gd.currentHospitalData={};
Run Code Online (Sandbox Code Playgroud)
我认为问题是构造函数仅实例化一次,因此分配给全局变量的新数据不会反映在.service.ts文件中。
如何解决此问题?还是有更好的方法来处理这种情况?
注意:以前我曾经localstorage存储过这些数据,但是由于可以通过Chrome Dev Tools进行修改,因此我现在考虑使用全局变量。
更新资料
我知道这是很棘手的方法,不是正确的方法,但是我注意到调用window.location.reload();logout()可以解决问题。
显然,此问题已解决。我必须将我的服务的提供程序声明从app.module.ts应用程序组件中的较低级别移到较低级别,然后将成功的登录重定向到。
但是我仍在寻找登录数据处理的适当解决方案/方法。
真正的问题是我已经宣布.service.ts内部为Provider app.mopdule.ts。这导致这些服务的构造函数仅在应用程序首次加载时实例化。因此,当我注销并再次登录时,新分配的数据未反映在这些.service.ts文件中,
在成功登录后,我将这些服务的提供程序声明移到了要重定向到的组件上。现在,每次成功登录后,构造函数将实例化,新分配的值将在这些.service.ts文件中反映。
| 归档时间: |
|
| 查看次数: |
4719 次 |
| 最近记录: |