Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在angular6中刷新页面时,用户名将为空_Javascript_Angular_Typescript_Angular6 - Fatal编程技术网

Javascript 在angular6中刷新页面时,用户名将为空

Javascript 在angular6中刷新页面时,用户名将为空,javascript,angular,typescript,angular6,Javascript,Angular,Typescript,Angular6,在我的Dasboard组件中我需要提供一个用户名并发送它 用于获取用户详细信息的表单服务器,如fName、lName、Image 我通过以下方式传递用户名: 当用户登录时,从LocalStorage获取username: 登录组件: private usenameSource = new BehaviorSubject<string>(''); userName$ = this.usenameSource.asObservable(); getDecodedAccessToken(

在我的
Dasboard组件中
我需要提供一个
用户名
并发送它 用于获取用户详细信息的表单服务器,如
fName、lName、Image

我通过以下方式传递
用户名

当用户登录时,从
LocalStorage
获取
username

登录组件:

private usenameSource = new BehaviorSubject<string>('');
userName$ = this.usenameSource.asObservable();

getDecodedAccessToken(): any {
  return jwt_decode(this.getRawAuthToken(AuthTokenType.AccessToken));
}

getUserNameDecode():any {
  const decode = this.getDecodedAccessToken();
  let userName = decode["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"];
  return this.usenameSource.next(userName);
}
this.loginService.userName$.subscribe((data) => {
  this.userName = data;
})
现在的问题是,当浏览器刷新时,用户名将为空,我需要再次登录


有什么问题吗?如何解决此问题?

我假设在启动应用程序时,将首先加载登录组件。
我还假设用户成功登录后,您就在本地存储中存储用户名详细信息。
因此,我们必须首先检查本地存储中的用户名,并在此基础上执行进一步的操作

登录组件
希望这将对您有所帮助。

我假设在启动应用程序时,登录组件将首先加载。
我还假设用户成功登录后,您就在本地存储中存储用户名详细信息。
因此,我们必须首先检查本地存储中的用户名,并在此基础上执行进一步的操作

登录组件
希望这对您有所帮助。

当页面刷新时,“usenameSource”值将被清除。要保留它,请在服务构造函数中再次调用方法“getUserNameDecode()

constructor(...) {
    this.getUserNameDecode();
}

getUserNameDecode():any {
   const decode = this.getDecodedAccessToken();

   if(!decode) {
      // login failed
      return;
   }

   let userName = decode["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"];
   return this.usenameSource.next(userName);
}

..

当页面刷新时,“usenameSource”值将被清除。要保留它,请在服务构造函数中再次调用方法“getUserNameDecode()

constructor(...) {
    this.getUserNameDecode();
}

getUserNameDecode():any {
   const decode = this.getDecodedAccessToken();

   if(!decode) {
      // login failed
      return;
   }

   let userName = decode["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"];
   return this.usenameSource.next(userName);
}

..

存储名称为本地存储,然后从中使用它如果您在
本地存储中存储了
用户名
(我在
用户名
键下使用),然后尝试用它初始化
行为主体
私有使用名称源=新行为主体(localStorage&&localStorage.username |?“”)
@Andriy我可以访问
username
这个:
username=decode[“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"];为什么不使用浏览器的本地存储?它看起来也像
decode[”http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name“]
是异步函数,但您可以以同步方式返回其结果。您应该重新检查它…将名称存储为本地存储,然后使用它。如果您在
本地存储中存储了
用户名
(I aasume在
用户名
项下),则尝试用它初始化
行为主体
专用名称源=新行为主体(localStorage&&localStorage.username | |“”)
@Andriy我可以访问
username
,它是:
username=decode[“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name“];
为什么不使用浏览器的本地存储?它看起来也像
decode[”http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"]
是一个异步函数,但您可以以同步方式返回其结果。您应该重新检查它。。。