1

我按照文档设置了 aurelia-store;在所有插件底部的 main.ts 中(来自带有 dotnet 核心的骨架应用程序),我定义了最后一个插件:

aurelia.use.standardConfiguration()
.plugin(PLATFORM.moduleName('aurelia-store'), { initialState })

然后我的应用程序需要登录用户并保存他们的不记名令牌。

await aurelia.start();
await aurelia.setRoot(PLATFORM.moduleName("modules/login/login.vm"));

在登录类中,我尝试使用 @connectTo 装饰器。但是它从不设置依赖属性。所以我在应用程序一开始就被困在这个简单的部分,我的工作已经建议不要使用 Aurelia,但我说我想要快速 POC。

我已经完全复制了文档,但仍然存在问题。值得注意的是,我必须在 tsconfig 中关闭 strictNullCheck 才能解析 doc 代码。

登录.ts

@connectTo({
  target: 'state',
  selector: {
    userToken: (store) => store.state.pipe(pluck('userToken')), 
    loginRedirected: (store) => store.state.pipe(pluck('loginRedirected'))
  }
})
export class Login {
  static inject = [Aurelia, Store]
  public state: State;
  app: Aurelia;

  constructor(Aurelia, private store: Store<State>) {
    this.app = Aurelia
    store.registerAction('ChangeUserToken', this.changeUserToken)
    store.registerAction('LoginRedirected', this.loginRedirect)
  }

  activate() {
    ... this.state is always undefined.
    if (!this.state.loginRedirected) { //error
    }
  }
}

我希望 this.state 属性具有从全局状态存储中填充的具有初始状态值的状态对象。例如

{ userToken: "", loginRedirected: false }

我只需要在登录中设置 userToken 并在 app.js 中检索它。这是不可能的; 使这个基本功能真正起作用可能缺少什么?

4

1 回答 1

1

ConnectTo 是一个辅助装饰器,用于避免手动状态订阅,因为状态流是一个普通的 rxjs 可观察的。如果您仔细查看官方插件文档,您会注意到它在不同的生命周期挂钩中设置订阅。

也就是说,connectTo 无法解决所有问题,而通过手动订阅,您将拥有最大的灵活性。不要放弃你的追求,你只是运气不好,一开始就陷入了一个更复杂的启动时间场景,这很容易也可能会咬你很多其他框架/库。还要确保访问官方 discourse.aurelia.io 论坛并将解决方案发回给 SO。

于 2019-08-23T19:18:01.803 回答