Ember - установить динамический заголовок страницы для маршрута
Я настроил свое приложение Ember для использования структуры pod. Я создал компонент topbar-nav, который я отображаю на главной странице. В компоненте topbar-nav я установил заголовок страницы, который я хотел бы установить автоматически для каждого маршрута, поэтому для маршрута панели мониторинга заголовок должен быть "Панель мониторинга", для панели / категорий заголовок должен быть категориями и так далее.
Вот моя структура приложения:
- приложение
- приложение
- компоненты
- topbar-нав
- приборная доска
- категории
Маршрутизатор приложения - router.js
import Ember from 'ember';
import config from './config/environment';
var Router = Ember.Router.extend({
location: config.locationType
});
Router.map(function() {
this.route('dashboard', function() {
this.route('categories');
});
});
export default Router;
И шаблоны:
применение / template.hbs
<aside>
{{sidebar-nav}}
</aside>
<main>
<header>
{{topbar-nav}}
</header>
{{outlet}}
</main>
компоненты / topbar-нав / template.hbs
<nav class="topbar-nav">
<div class="text-center">
<h5 class="page-title">{{title}}</h5>
</div>
</nav>
{{yield}}
компоненты / topbar-нав / component.js
import Ember from 'ember';
export default Ember.Component.extend({
title: 'Component title'
});
Как вы уже можете сказать, заголовок, который я получаю, называется "Название компонента".
Самый точный ответ, который я получил к настоящему времени, таков:
хотя, попробовав много разных подходов, я не смог найти хорошего решения.
Есть ли чистый и простой способ сделать это? Любые идеи и решения очень ценятся.
2 ответа
Я хотел подобный динамический заголовок и нашел эту страницу. Итак, вот мое решение, основанное на замечании @AcidBurn, что application controller
имеет currentRouteName
имущество.
Если вы хотите последний дочерний маршрут:
screen_title: Ember.computed('currentRouteName', function () {
let route = this.get('currentRouteName').split('.');
// Return last route name (e.g. categories from dashboard.categories)
return route[route.length - 1];
}),
Если вы хотите родительский маршрут:
screen_title: Ember.computed('currentRouteName', function () {
let route = this.get('currentRouteName').split('.');
// Return parent route name (e.g. reports from reports.index)
return route[0];
}),
ember-page-title кажется лучше, чем ember-cli-document-title (лучше документы + API)