在没有初始化程序的情况下,在应用启动时初始化服务

时间:2019-02-12 19:10:43

标签: ember.js service

我在Ember 2.18中有一个名为test的服务。例如

导出默认Service.extend({//一些代码})

如果可能,我需要能够从服务中的应用程序中初始化此测试服务。本质上是希望在不使用初始化程序的情况下,从服务内部在整个应用程序中注入服务。这可能吗?

1 个答案:

答案 0 :(得分:0)

所有服务均在应用启动时实例化。

但是默认情况下,如果没有初始化程序,就无法将它们注入所有地方。我实际上建议不要这样做,因为它可能导致难以追踪的行为。

因此,要在没有初始化程序的情况下在另一个服务中使用该服务,您必须执行以下操作:

import { inject as service } from '@ember/service';

export default Service.extend({
  testing: service(),
})

更新:使用助手提供的服务

(从这里开始:https://github.com/rwjblue/ember-router-helpers/blob/master/addon/helpers/is-active.js

import { inject as service } from '@ember/service';
import Helper from '@ember/component/helper';
import handleQueryParams from '../utils/handle-query-params';

export default Helper.extend({
  router: service(),

  init() {
    this._super(...arguments);
    this.addObserver('router.currentURL', this, 'recompute');
  },

  compute(_params) {
    let params = handleQueryParams(_params);
    return this.get('router').isActive(...params);
  }
});