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 的单例实例,这是默认行为。然后容器会在创建视图时将其注入视图模型。