- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!