Ответ 1
Я думаю, что функция aurelia setRoot(module)
поможет в этом.
Здесь стандартный файл main.js
, который "загружает" приложение aurelia:
main.js
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.developmentLogging();
aurelia.start()
.then(a => a.setRoot()); // this is the equivalent of setRoot('app')
}
Когда setRoot
вызывается без аргументов, Aurelia ищет модель view.js + app.html viewmodel и view.
Мы можем настроить логику, чтобы проверить, зарегистрирован ли пользователь, а если нет, отобразите экран входа:
main.js
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.developmentLogging();
aurelia.start()
.then(a => {
if (userIsLoggedIn()) {
a.setRoot('app');
} else {
a.setRoot('login');
}
});
}
Затем в модели входа в систему вы можете вызвать setRoot('app')
после того, как пользователь успешно выполнил вход:
login.js
import {Aurelia, inject} from 'aurelia-framework';
import {AuthService} from './my-auth-service';
@inject(Aurelia, AuthService)
export class Login {
userName = '';
password = '';
constructor(aurelia, authService) {
this.aurelia = aurelia;
this.authService = authService;
}
submit() {
// attempt to login and if successful, launch the app view model.
this.authService.login(userName, password)
.then(() => this.aurelia.setRoot('app'));
}
}
Примечание. Если ваше приложение включает функцию "выход из системы", которая отправит пользователя обратно на экран входа в систему (например, setRoot('login')
), обязательно reset маршрутизатор и соответственно обновите URL-адрес. Это предотвратит проблемы, когда пользователь снова зайдет. Более подробная информация в здесь и здесь.