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