Магазин Aurelia connectTo никогда не устанавливает целевое свойство

Я установил 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.

Я точно скопировал документы и все еще имею проблему. Примечательно, что мне пришлось отключить strictNullCheck в tsconfig, чтобы сделать анализ кода документа.

Логин.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. Это невозможно; чего может не хватать, чтобы эта базовая функция действительно работала?

🤔 А знаете ли вы, что...
С помощью Aurelia можно создавать SPA-приложения (Single Page Applications) с высокой производительностью.


1
196
1

Ответ:

Решено

ConnectTo — это вспомогательный декоратор, позволяющий избежать ручных подписок на состояние, поскольку поток состояний является наблюдаемым ванильным rxjs. Если вы внимательно посмотрите на официальную документацию плагина, вы заметите, что она настраивает подписку в другом хуке жизненного цикла.

Тем не менее, connectTo не может решить все, и с ручной подпиской у вас есть максимальная гибкость. Не сдавайтесь в своих поисках, вам просто не повезло попасть в более сложный сценарий времени запуска в самом начале, который достаточно легко может укусить вас с множеством других фреймворков/библиотек. Также не забудьте посетить официальный форум discourse.aurelia.io и опубликовать решения для SO.