【发布时间】:2019-02-12 19:10:43
【问题描述】:
我在 Ember 2.18 中有一个名为 testing 的服务。例如
导出默认Service.extend({ //一些代码})
如果可能的话,我需要能够在应用程序中从服务中初始化此测试服务。本质上是希望在不使用初始化程序的情况下从服务内部全局地在应用程序中注入服务。这可能吗?
【问题讨论】:
我在 Ember 2.18 中有一个名为 testing 的服务。例如
导出默认Service.extend({ //一些代码})
如果可能的话,我需要能够在应用程序中从服务中初始化此测试服务。本质上是希望在不使用初始化程序的情况下从服务内部全局地在应用程序中注入服务。这可能吗?
【问题讨论】:
服务都在应用启动时实例化。
但是默认情况下,如果没有初始化程序,您不能将它们注入任何地方。我实际上建议不要这样做,因为它会导致难以追踪的行为。
因此,要在没有初始化程序的情况下在另一个服务中使用该服务,您必须这样做:
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);
}
});
【讨论】: