Хотя вы технически можете использовать beforeModel
для получения контроллера через this.controllerFor
, как подсказывает @KathirMagaesh, я бы не стал выступать за это решение. Это определенно не нормальный или ожидаемый паттерн Ember. Кроме того, если вы посмотрите на transition api , здесь нет ссылки на transition.targetName
. Если это работает, это частный API и, следовательно, хрупкий.
Если вам нужно изменить свойство на основе текущего маршрута, вы должны использовать публичный маршрутизатор , который предоставляет некоторые полезные свойства для этой цели!
Например, в вашем контроллере вы можете иметь вычисляемое свойство, которое использует службу маршрутизатора, чтобы определить, каким должен быть заголовок страницы
import Controller from '@ember/controller';
import { computed } from '@ember/object';
import { inject } from '@ember/service';
// this injects the router service into our component via Ember's DI framework
router: inject(),
export default Controller.extend({
pageTitle: computed('router.currentRouteName', function(){
let currentRoute = this.router.currentRouteName;
if(currentRoute === 'foo'){
return 'page title';
}
// do other stuff for other routes.
})
})
Используется currentRouteName , которое представляет собой разделенное точками имя, например foo.bar
. Вы также можете получить доступ к URL через currentURL , который будет /foo/bar
PS. Поскольку я еще не использовал классы ES6, я предоставил решение ember старого стиля. Возможно, вам понадобится декоратор @computed
или @tracked
, где я использую функцию computed
. Я знаю только о стиле октанового тлеющего огня из RFC и потрясающих сообщений в блоге , но я не в курсе того, что приземлилось.
PPS. Если вы используете старый ember, текущие свойства имени маршрута / URL доступны на контроллере приложения.