各种控制器之间的共享数据

时间:2016-08-11 13:34:07

标签: ember.js ember-cli

我有一个需要构建Ember应用程序的项目。该应用程序将有许多路由,一些路由将有一些model

我目前的问题是某些信息是全局的,这意味着它们存在于每个页面(.hbs)中,我需要定期更新它。

我尝试将信息放在应用程序路径上,如下所示,但它不起作用,内容无法在其他路径上访问:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(params) {
    return Ember.$.getJSON('/api/users/current')
  }
});

我还尝试使用setInterval重新加载信息,但这也不起作用。

import Ember from 'ember';

export default Ember.Route.extend({
  init: function() {
    var thyself = this;
    var interval = setInterval(function(){
      thyself.my_reload()
    }, 1000);
    this.set('interval', interval);
    this.set('counter', {});
  },
  my_reload: function() {
    var counter = this.get('counter');
    if (counter >= 10) {
      clearInterval(this.get('interval'));
    }
    this.set('data', Ember.$.getJSON('/api/users/current'));
  }
});

我可以在哪里放置此信息,以便在所有路线上都可以使用?我如何定期重新加载信息?

我正在使用ember-cli

1 个答案:

答案 0 :(得分:1)

@NicosKaralis, 你应该为它服务。

您可以通过命令生成它:ember generate service name-of-service

你应该创建方法。 如果您想从控制器获取访问权限,则应将其注入控制器:

nameOfService: Ember.inject.service(),(请记住camelCase)

如果你想在你的控制器中使用你的服务中的某些方法,你会像这样使用它(带有计算属性的例子,你也可以使用它而不用计算属性):

someComputedFunctionInController: Ember.computed(function() {
  this.get('nameOfService').yourFunctionFromService();
},

nextComputedFunctionInController: Ember.computed(function() {
  this.get('nameOfService.getSomethingFromService');
}

更多: https://guides.emberjs.com/v2.7.0/tutorial/service/

希望,它会对你有帮助。