Связь маршрута Ember с несвязанным компонентом

Я знаю, что EmberJS продвигает «данные вниз, действия вверх», но у меня есть сценарий, который я не уверен, как вписаться в эту парадигму. Будет лучше, если я объясню на примере, аналогичном тому, чего я пытаюсь достичь.

Допустим, у меня есть фиксированный компонент заголовка ('fixed-header'). Я хочу, чтобы этот заголовок отображался всегда, поэтому, конечно же, я добавляю его в свой основной шаблон приложения:

{{fixed-header}}
{{outlet}}

Теперь предположим, что я хочу, чтобы мой заголовок отображал некоторую информацию о маршруте, по которому я нахожусь. Для простоты предположим, что у каждого маршрута есть заголовок, который я хочу отобразить в фиксированном заголовке. Итак, нахожусь ли я на /foo, /foo/bar/baz или /wackawacka/meh?cat=meow, я хочу, чтобы этот маршрут мог отправлять некоторые данные в компонент fixed-header для отображения. Другими словами, я как бы хочу пойти против «данных вниз» и сделать «данные вверх».

Каков идеальный способ приблизиться к этому? Моим первым побуждением было создать сервис, который my-header слушает, а маршруты могут публиковать свою информацию. Но правильно ли это? Мне кажется странным создавать сервис только для отправки небольшого количества текста. Есть ли другой способ?


person accelerate    schedule 18.11.2016    source источник
comment
Честно говоря, я думаю, что сервис идеально подходит для этого. На самом деле, мы надеемся, что когда-нибудь у нас будет служба маршрутизации для этого.   -  person Lux    schedule 19.11.2016
comment
Хорошо, я просто подумал, что было бы излишним иметь сервис только для этой функции.   -  person accelerate    schedule 19.11.2016


Ответы (2)


Вы можете использовать параметр для вашего компонента.

{{fixed-header info=headerInfo}}
{{outlet}}

А потом в любом маршруте в какой-нибудь крючок

setupController: function(controller, model) {
  this._super(controller, model);
  var headerInfo = ...
  this.controllerFor('application').set('headerInfo', headerInfo);
}
person Serge    schedule 19.11.2016
comment
Мне действительно нравится это решение. Я не решался использовать сервис, потому что мне нужно было отправить компоненту небольшую текстовую строку, а сервис казался излишним. Я по-прежнему могу использовать службу, если решу, что мне нужно отправить больше данных, но на данный момент ваше решение работает отлично. - person accelerate; 21.11.2016

Служба – это путь. см. Руководство по Ember по сервису

Ember.Service — это объект Ember, который живет в течение всего времени работы приложения и может быть доступен в разных частях вашего приложения. Службы полезны для функций, требующих общего состояния или постоянных подключений.

person Ember Freak    schedule 19.11.2016