У меня есть шаблон приложения с компонентом боковой панели. Этот компонент боковой панели передается модели маршрута приложения для отображения в списке. Маршрут приложения проверяет, прошел ли пользователь аутентификацию, и если нет, пропускает загрузку модели. Индексный маршрут не является защищенным маршрутом, поэтому он все равно будет отображаться, когда он не вошел в систему, просто без указания пользователем данных c. Когда пользователь входит в систему или пытается использовать защищенный маршрут, он перенаправляется на маршрут входа в систему и возвращается к предпринятому переходу или индексу маршрута.
Похоже, нет никакого способа заставить хук модели маршрута приложения обновить sh после входа в систему. Я попытался перенести загрузку данных из маршрута приложения в службу и вызвать метод refre sh для службы из маршрута входа в систему, но это привело к той же проблеме.
Итак, мой главный Вопрос в том, каков рекомендуемый подход к загрузке данных после входа в систему, который необходим в шаблоне приложения? Можно ли переместить этот компонент боковой панели в другой шаблон, доступный только после входа в систему? Это кажется сложнее, чем должно быть, поэтому я предполагаю, что мне здесь не хватает некоторых базовых c концепций с потоком данных между маршрутами / компонентами! Спасибо!
Мой маршрут приложения (приложение / маршруты / приложение. js)
import Route from "@ember/routing/route";
import { inject as service } from "@ember/service";
export default class ApplicationRoute extends Route {
@service router;
@service session;
model() {
if (this.get('session').get('isAuthenticated'))
{
return this.store.findAll("project");
}
}
}
Шаблон приложения (app / templates / application.hbs)
<HeadLayout />
<div class="wrapper">
<SideBar @projects={{this.model}} />
<div id="content">
<NavBar />
<div>
{{outlet}}
</div>
</div>
</div>
Компонент боковой панели (приложение / компоненты / side-bar.hbs)
<nav id="sidebar">
<div class="container">
<div class="sidebar-content">
...
{{#if this.session.isAuthenticated}}
<div class="sidebar-projects">
...
<div class="list-group">
{{#each this.projects as |project|}}
<button type="button">
{{project.name}}
</button>
{{/each}}
</div>
</div>
{{else}}
<p>Login to access projects.</p>
{{/if}}
</div>
</div>
</nav>
Мой маршрутизатор (приложение / маршрутизатор. js)
import EmberRouter from '@ember/routing/router';
import config from './config/environment';
export default class Router extends EmberRouter {
location = config.locationType;
rootURL = config.rootURL;
}
Router.map(function() {
this.route('login');
this.authenticatedRoute('projects', { path: '/projects'}, function() {
this.authenticatedRoute('new');
this.authenticatedRoute('edit');
this.authenticatedRoute('project', { path: ':project_id' });
});
this.authenticatedRoute('photos', { path: '/photos'}, function() {
this.authenticatedRoute('photo', {path: ':photo_id'});
});
});