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

Shared data between various controllers

我有一个项目需要构建 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

@NicosKaralis, 你应该为此使用服务。

可以通过命令生成:embergenerate service name-of-service

然后你应该创建方法。 当你想从你的控制器获得访问权限时,你应该将它注入你的控制器:

nameOfService: Ember.inject.service(),(这里是 remember 驼峰式)

如果你想在你的控制器中使用你的服务的一些方法,你将像这样使用它(例如计算 属性,你也可以在没有计算 属性 的情况下使用它):

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/

希望对你有所帮助