Aurelia 中的全局应用状态
Global Application State in Aurelia
我正在尝试将 class 注入到我的 Aurelia 应用程序的其他位置,以便在登录后共享身份验证状态。我正在关注此示例 http://hobbit-on-aurelia.net/appstate/,但看起来范围在转换过程中丢失或者它们是独立实例。 Aurelia 的文档说:
By default, the DI container assumes that everything is a singleton
instance;
当我设置路由器从应用程序实例执行 this.userSession.router = router
时,userSession 实例未更新。 this.loggedUser
始终未从外部定义。
这是我的笨蛋:http://plnkr.co/edit/qXtSGx
如果您假设用户会话是单例,那就是问题所在。在您的示例中,用户会话是一个视图模板,它不是单例。每当您导航到视图时,这些都会被创建(在当前的实现中,这可能会随着缓存的改变而改变)。每当您从视图中导航时,它们也会被销毁。
您想要的是一个独立的 class,您可以将其注入到视图模型的构造函数中。
export class MyViewModel {
static inject = [UserSession];
constructor(userSession) {
this.userSession = userSession;
}
}
这将创建服务 class UserSession 的单例实例,这是默认行为。然后容器会在创建视图时将其注入视图模型。
我正在尝试将 class 注入到我的 Aurelia 应用程序的其他位置,以便在登录后共享身份验证状态。我正在关注此示例 http://hobbit-on-aurelia.net/appstate/,但看起来范围在转换过程中丢失或者它们是独立实例。 Aurelia 的文档说:
By default, the DI container assumes that everything is a singleton instance;
当我设置路由器从应用程序实例执行 this.userSession.router = router
时,userSession 实例未更新。 this.loggedUser
始终未从外部定义。
这是我的笨蛋:http://plnkr.co/edit/qXtSGx
如果您假设用户会话是单例,那就是问题所在。在您的示例中,用户会话是一个视图模板,它不是单例。每当您导航到视图时,这些都会被创建(在当前的实现中,这可能会随着缓存的改变而改变)。每当您从视图中导航时,它们也会被销毁。
您想要的是一个独立的 class,您可以将其注入到视图模型的构造函数中。
export class MyViewModel {
static inject = [UserSession];
constructor(userSession) {
this.userSession = userSession;
}
}
这将创建服务 class UserSession 的单例实例,这是默认行为。然后容器会在创建视图时将其注入视图模型。