Глобальное состояние приложения в Aurelia

Я пытаюсь внедрить класс в другие места в моем приложении Aurelia, чтобы поделиться состоянием аутентификации после входа в систему. Я использую этот пример: http://hobbit-on-aurelia.net/appstate/ но похоже, что область действия теряется во время переходов или они являются независимыми экземплярами. Документы Аурелии говорят:

По умолчанию контейнер внедрения зависимостей предполагает, что все является единичным экземпляром;

Когда я устанавливаю маршрутизатор, выполняющий this.userSession.router = router из экземпляра приложения, экземпляр userSession не обновляется. this.loggedUser всегда не определяется извне.

Вот мой плункер: http://plnkr.co/edit/qXtSGx


person cleison    schedule 03.07.2015    source источник
comment
Это все еще в силе. Я запускаю Aurelia 1.0.0, и использование статьи приводит к указанной проблеме. Слава богу, я нашел ваш вопрос, мне было интересно около 2 дней, что это не работает.   -  person Vincent P    schedule 26.01.2016


Ответы (1)


Если вы предполагаете, что пользовательский сеанс является одноэлементным, то это проблема. В вашем примере пользовательский сеанс представляет собой шаблон представления, который не является одноэлементным. Они создаются (в текущей реализации это может измениться при кэшировании позже) всякий раз, когда вы переходите к представлению. Они также уничтожаются всякий раз, когда вы переходите из представления.

Вам нужен автономный класс, который вы вводите в конструктор вашей модели представления.

export class MyViewModel {
   static inject = [UserSession];
   constructor(userSession) {
       this.userSession = userSession;
   }
}

Это создаст одноэлементный экземпляр (поведение по умолчанию) класса обслуживания UserSession. Затем контейнер внедрит его в модель представления при создании представления.

person Briggs    schedule 06.07.2015
comment
Хорошо, это многое проясняет. Я изменил свой плункер, создав автономный класс. Может быть, я не понимаю всей идеи, но она работает не так, как ожидалось. - person cleison; 06.07.2015
comment
Это отличный ответ. Я написал статью в блоге о глобальном состоянии приложения в aurelia здесь: davismj.me/blog/ aurelia-auth-pt2 - person Matthew James Davis; 22.09.2015