Javascript Aurelia中的全局应用状态

Javascript Aurelia中的全局应用状态,javascript,dependency-injection,aurelia,Javascript,Dependency Injection,Aurelia,我正试图在我的Aurelia应用程序中的其他地方注入一个类,以便在登录后共享身份验证状态。我将遵循这个示例,但看起来在转换过程中范围丢失了,或者它们是独立的实例。奥雷利亚的医生说: 默认情况下,DI容器假定所有内容都是单例 实例 当我从app instance设置路由器dothis.userSession.router=router时,userSession实例不会更新this.loggedUser从外部总是未定义的 这是我的建议:如果假设用户会话是单例会话,那么这就是问题所在。在您的示例中,用

我正试图在我的Aurelia应用程序中的其他地方注入一个类,以便在登录后共享身份验证状态。我将遵循这个示例,但看起来在转换过程中范围丢失了,或者它们是独立的实例。奥雷利亚的医生说:

默认情况下,DI容器假定所有内容都是单例 实例

当我从app instance设置路由器do
this.userSession.router=router
时,userSession实例不会更新
this.loggedUser
从外部总是未定义的


这是我的建议:

如果假设用户会话是单例会话,那么这就是问题所在。在您的示例中,用户会话是一个视图模板,而不是单例。每当您导航到视图时,都会创建这些视图(在当前实现中,这可能会在以后的缓存中更改)。当您从视图中导航时,它们也会被破坏

您需要的是一个独立类,可以将其注入视图模型的构造函数中

export class MyViewModel {
   static inject = [UserSession];
   constructor(userSession) {
       this.userSession = userSession;
   }
}

这将创建服务类UserSession的一个单例实例(默认行为)。创建视图时,容器会将其注入视图模型。

好的,这澄清了很多问题。我已经更改了我的plunker,创建了一个独立的类。也许我没有完全理解这个想法,但它没有按预期工作。这是一个很好的答案。我在aurelia这里写了一篇关于全局应用程序状态的博客文章:这仍然有效。我正在运行Aurelia 1.0.0,并使用文章结果来说明问题。谢天谢地,我发现了你的问题,我已经想了大约两天,这不起作用。