Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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
Angular 角度7:路由后单例服务不工作_Angular_Typescript - Fatal编程技术网

Angular 角度7:路由后单例服务不工作

Angular 角度7:路由后单例服务不工作,angular,typescript,Angular,Typescript,我有两个URL/login和/home。当我登录时,我想将用户名存储在LoginService的一个字段中。这是在/login页面上完成的。现在,当我转到/home时,就好像再次创建了服务,所有字段都是空的 这是我的服务 @可注入({ 提供于:“根” }) 导出类登录服务{ 公共当前用户:用户; } 这就是我在组件中获得服务的方式 导出类HomeComponent{ 构造函数(私有登录服务:登录服务){} } 这是我的路由模块: 从'@angular/core'导入{NgModule}; 从

我有两个URL
/login
/home
。当我登录时,我想将用户名存储在LoginService的一个字段中。这是在
/login
页面上完成的。现在,当我转到
/home
时,就好像再次创建了服务,所有字段都是空的

这是我的服务

@可注入({
提供于:“根”
})
导出类登录服务{
公共当前用户:用户;
}
这就是我在组件中获得服务的方式

导出类HomeComponent{
构造函数(私有登录服务:登录服务){}
}
这是我的路由模块:

从'@angular/core'导入{NgModule};
从'@angular/router'导入{Routes,RouterModule};
从“./components/login/login.component”导入{LoginComponent};
从“./components/home/home.component”导入{HomeComponent};
从“./components/signup/signup.component”导入SignUpComponent;
常数路由:路由=[
{路径:'',重定向到:'home',路径匹配:'full'},
{path:'home',component:HomeComponent},
{path:'login',component:LoginComponent},
{路径:'signup',组件:SignUpComponent}
];
@NGD模块({
导入:[RouterModule.forRoot(路由)],
导出:[路由模块]
})
导出类AppRoutingModule{}
现在我是错过了什么,还是走错了路线


提前感谢

您很可能在其他地方提供服务。搜索LoginService的所有实例,并确保您没有在其他模块或组件中提供它


如果它出现在另一个模块或组件的“提供”数组中,您将不会有该服务的全局单例实例。

您很可能在其他地方提供该服务。搜索LoginService的所有实例,并确保您没有在其他模块或组件中提供它


如果它出现在另一个模块或组件的提供数组中,您将不会有该服务的全局单例实例。

如果我正确理解您想要做什么,我建议您:

  • 将当前用户存储在本地存储器上,并随时检索他 (
    user=JSON.parse(localStorage.getItem(当前用户));
  • CURRENT\u USER
    设置为
    Observable
    subscribe()
    到所需组件上
  • 这与路由实现无关,而是角度生命周期的工作方式

    更新 对于第二个选项: 创建新服务(
    UserService

    在要获取当前用户的组件上:

    user: User;
    constructor(private userService: UserService) {
      this.userService.getCurrentUser().subscribe(currentUser => {
        this.user = currentUser;
      });
    }
    

    如果我正确理解您想要做什么,我建议您:

  • 将当前用户存储在本地存储器上,并随时检索他 (
    user=JSON.parse(localStorage.getItem(当前用户));
  • CURRENT\u USER
    设置为
    Observable
    subscribe()
    到所需组件上
  • 这与路由实现无关,而是角度生命周期的工作方式

    更新 对于第二个选项: 创建新服务(
    UserService

    在要获取当前用户的组件上:

    user: User;
    constructor(private userService: UserService) {
      this.userService.getCurrentUser().subscribe(currentUser => {
        this.user = currentUser;
      });
    }
    

    确保使用标准角度方式(例如:routerLink)重定向到HomeComponent。如果您使用完整路由,您的页面将被刷新,之后所有服务都将为空

    确保使用标准角度方式(例如:routerLink)重定向到HomeComponent。如果您使用完整路由,您的页面将被刷新,之后所有服务都将为空

    从“./components/sign-up/signup.component”导入注册组件为什么此导入不同?(无括号{}@FranciscoSantorelli只是我使用了
    导出默认类SignupComponent
    你能找出为什么会发生这种情况吗?我面临同样的问题,我确信我在其他任何地方都没有提供相同的服务。
    import-SignUpComponent from./components/signup/signup.component'为什么此导入不同?(无括号{}@FranciscoSantorelli只是我使用了
    导出默认类SignupComponent
    你能找出为什么会发生这种情况吗?我面临着同样的问题,我确信我在其他任何地方都没有提供同样的服务。是的,事实并非如此。谢谢是的,事实并非如此。谢谢我真的不想在localStorage中存储我的用户详细信息。我已将该字段修改为
    public CURRENT_USER:Observable=new Observable()。现在如何更新数据?还有,如何订阅未加载的组件?我已经更新了答案,以便详细了解我的第二个建议的含义。我真的不想将我的用户详细信息存储在localStorage中。我已将该字段修改为
    public CURRENT_USER:Observable=new Observable()。现在如何更新数据?另外,如何订阅未加载的组件?我已经更新了我的答案,以便详细了解我的第二个提案的含义。
    
    user: User;
    constructor(private userService: UserService) {
      this.userService.getCurrentUser().subscribe(currentUser => {
        this.user = currentUser;
      });
    }