Eug*_*esh 5 javascript angular
所以,我正在寻找问题的解决方案......好吧,让我分享我的想法,可能你可以帮助我或说我错了。
介绍:
当您创建 Angular 应用程序时,通常会创建调用 AuthService 之类的服务,其中包含方法 login、logout、refreshToken 等。
但是,您还需要将当前用户存储在某个地方,它将是登录到您的应用程序的用户。通常,您会创建类似 UserModel 的内容,其中包含名字、姓氏、余额、组、朋友等字段。因此,您将在 AuthService 中存储此模型的实例。
之后,为了获得活跃用户,您需要像这样在 @component 中注入您的 Auth 服务:
constructor(private _authService: AuthService) {
this.user = this._authservice.user;
}
Run Code Online (Sandbox Code Playgroud)
是的?
问题:
所以,我不想注入 authService 来获取当前用户。我想要 CurrentUser 服务,该服务将被允许在所有模块中使用,并将包含有关登录用户的所有内容,例如 UserModel。
我想要这样的东西:
constructor(public user: UserService) {
}
Run Code Online (Sandbox Code Playgroud)
但是当用户注销时,我需要清理 UserService 并将每个字段重新初始化为默认值。所以,这一步是一个真正的问题。是的,当然,我可以按对象字段循环执行 for ...,但它很糟糕!我想创建 UserService 的新实例并在全局范围内重新分配。
如果您仍然不明白 - UserService 在我的根 AppModule 中被声明为提供者,如下所示:
@NgModule({
imports: [
...
],
declarations: [
...
],
providers: [
UserService
]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
问题: 如何为 UserService 创建新实例并在全局中替换它?
当用户注销时,我想这样做,我的所有组件都将获得新的、干净的 UserService 实例,没有填充字段等。当新用户登录时,我将使用 UserService 类的方法,例如 user.updateUser(data)填充这个实例。
这可以通过将服务声明为UserService您的用户在登录后被定向到的最高级别组件(例如 HomeComponent)来实现。继续authService在根目录中将您声明为提供者,app.module.ts以便它在整个应用程序生命周期内保持单例。
通过这样做,UserService将在每次用户登录时创建,并且它可供 home 组件的所有子级使用(这就是为什么您要确保在最高级别的组件中提供它),并且它将是每次用户注销时销毁。为每个用户会话创建一个单例。
@Component({
selector: 'home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css'],
providers: [UserService]
})
export class HomeComponent {...}
Run Code Online (Sandbox Code Playgroud)
我想强调最高级别的组件。本质上,从架构的角度来看,您想要做的是(在本例中)确保 HomeComponent 本质上是一个容器组件,用于登录用户此后需要访问的所有路由/组件。否则,这种技术对于兄弟组件将不会成功,因为共享UserService取决于分层组件结构。
| 归档时间: |
|
| 查看次数: |
7916 次 |
| 最近记录: |