Aurelia的全球应用状况

cle*_*son 3 javascript dependency-injection aurelia

我正在尝试将一个类注入我的Aurelia应用程序中的其他位置,以便在登录后共享身份验证状态.我正在关注这个例子http://hobbit-on-aurelia.net/appstate/但看起来在转换期间范围丢失或者它们是独立实例.Aurelia的文档说:

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

当我this.userSession.router = router从app实例设置路由器时,userSession实例不会更新.this.loggedUser从外面总是不明确的.

这是我的傻瓜:http://plnkr.co/edit/qXtSGx

Bri*_*ggs 5

如果您假设用户会话是单例,则问题就在于此.在您的示例中,用户会话是视图模板,它不是单例.无论何时导航到视图,都会创建这些(在当前实现中,这可能会随着缓存而改变).从视图导航时,它们也会被破坏.

你想要的是一个独立的类,你注入到视图模型的构造函数中.

export class MyViewModel {
   static inject = [UserSession];
   constructor(userSession) {
       this.userSession = userSession;
   }
}
Run Code Online (Sandbox Code Playgroud)

这将创建服务类UserSession的单例实例,即默认行为.然后,容器将在创建视图时将其注入视图模型.