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