Я установил 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) с высокой производительностью.
ConnectTo — это вспомогательный декоратор, позволяющий избежать ручных подписок на состояние, поскольку поток состояний является наблюдаемым ванильным rxjs. Если вы внимательно посмотрите на официальную документацию плагина, вы заметите, что она настраивает подписку в другом хуке жизненного цикла.
Тем не менее, connectTo не может решить все, и с ручной подпиской у вас есть максимальная гибкость. Не сдавайтесь в своих поисках, вам просто не повезло попасть в более сложный сценарий времени запуска в самом начале, который достаточно легко может укусить вас с множеством других фреймворков/библиотек. Также не забудьте посетить официальный форум discourse.aurelia.io и опубликовать решения для SO.