与无关组件

时间:2016-11-18 22:06:22

标签: ember.js ember-router ember-components

我知道EmberJS推动“数据下降,行动起来”,但我有一个场景,我不确定如何适应这种范式。如果我通过一个类似于我想要实现的例子来解释,那是最好的。

假设我有一个固定的标题组件('fixed-header')。我希望这个标题始终显示,所以当然我将它添加到我的主应用程序模板中:

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

现在让我们说我希望我的标题显示一些关于我所在路线的信息。为简单起见,假设每条路线都有一个我希望在固定标题中显示的标题。因此,无论我是/foo还是/foo/bar/baz还是/wackawacka/meh?cat=meow,我都希望该路由能够将一些数据发送到fixed-header组件以进行显示。换句话说,我有点想反对“数据​​向下”并做一个“数据向上”。

理解这种方法的理想方法是什么?我的第一直觉是创建一个my-header监听的服务,路由可以发布他们的信息。但这是正确的做法吗?创建服务只是为了发送一些文本,这对我来说似乎很奇怪。还有另外一种方法吗?

2 个答案:

答案 0 :(得分:2)

您可以为组件使用参数。

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

然后在某个钩子中的任何路线

setupController: function(controller, model) {
  this._super(controller, model);
  var headerInfo = ...
  this.controllerFor('application').set('headerInfo', headerInfo);
}

答案 1 :(得分:1)

服务是要走的路。参考Service Ember Guide

  

Ember.Service是一个Ember对象,它在应用程序的持续时间内存在,并且可以在应用程序的不同部分中使用。   对于需要共享状态或持久连接的功能,服务非常有用。