Aurelia存储区connectTo永远不会设置目标属性

时间:2019-04-05 22:53:26

标签: aurelia aurelia-store

我按照文档设置了aurelia商店;在所有插件底部的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才能对文档代码进行解析。

Login.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属性具有一个使用initialState值从全局状态存储中填充的状态对象。 例如

{ userToken: "", loginRedirected: false }

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

1 个答案:

答案 0 :(得分:1)

ConnectTo是一个帮助装饰器,可以避免手动进行状态订阅,因为状态流是可观察到的普通rxjs。如果您仔细阅读官方插件文档,您会发现它在不同的生命周期挂钩中设置了订阅。

这表示connectTo无法解决所有问题,而通过手动订阅,您将拥有最大的灵活性。 不要放弃您的追求,您只是不幸地在一开始就陷入了一个更复杂的启动时机场景,这很容易也会给您带来很多其他框架/库的麻烦。另外,请确保访问官方的discourse.aurelia.io论坛并回发SO的解决方案。