我正在尝试将一个类注入(inject)到我的 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
始终未从外部定义。
这是我的 plunker:http://plnkr.co/edit/qXtSGx
最佳答案
如果您假设用户 session 是单例,那就是问题所在。在您的示例中,用户 session 是一个 View 模板,它不是单例。每当您导航到 View 时,这些都会被创建(在当前的实现中,这可能会随着缓存的改变而改变)。每当您从 View 中导航时,它们也会被销毁。
您想要的是一个独立的类,您可以将其注入(inject)到 View 模型的构造函数中。
export class MyViewModel {
static inject = [UserSession];
constructor(userSession) {
this.userSession = userSession;
}
}
这将创建服务类 UserSession 的单例实例(默认行为)。然后,容器会在创建 View 时将其注入(inject) View 模型。
关于javascript - Aurelia 中的全局应用状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210597/