【问题标题】:Initialize a service on app startup without initializer在没有初始化程序的情况下在应用程序启动时初始化服务
【发布时间】:2019-02-12 19:10:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: ember.js service


    【解决方案1】:

    服务都在应用启动时实例化。

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

    因此,要在没有初始化程序的情况下在另一个服务中使用该服务,您必须这样做:

    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);
      }
    });
    

    【讨论】:

    • 我实际上希望在帮助程序中使用该服务。但首先我需要让服务自己初始化,而不是从另一个服务初始化。
    • 添加了一个如何使用助手服务的示例。你是什​​么意思“让服务自己初始化”?所有服务都在应用启动时实例化
    • 最终结果是通过app.js初始化了一个实例,感谢您的输入
    • app.js 是什么意思?能再解释一下吗?
    • const testService = instance.lookup('service:testing'); testService.initialize();
    猜你喜欢
    • 2011-11-17
    • 2020-02-12
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多