【问题标题】:How can I pass arguments to an ember service while it is injected?如何在注入时将参数传递给 ember 服务?
【发布时间】:2017-11-11 14:33:01
【问题描述】:

我有一个组件,比如 MyComponent。我已经在这个组件中注入了一个服务,比如 MyService。

当在另一个组件(比如 ParentComponent)中使用“MyComponent”时,它会通过模板将一些参数传递给“MyComponent”。注入“MyComponent”的“MyService”需要这个模板参数。如何在注入服务时将其传递给服务?

现在我已经在服务中编写了一个特殊的函数,它将在“MyComponent”的 init() 函数中调用。我不知道这是否正确。

这是一个粗略的代码示例:

父组件/template.hbs:

// some html
{{my-component myOptions=parentOptions}}
// some html

我的组件/component.js:

export default Component.extend({
 // some js
 myService: inject.service(),
 init() {
  this._super(...arguments);
  get(this, 'myService').passDownMyArguments(get(this, 'myOptions'));
 },
 // some js again
})

我想知道是否可以在注入时将“myOptions”传递给服务,而不是调用服务中的另一个函数。

【问题讨论】:

    标签: ember.js dependency-injection


    【解决方案1】:

    我猜你不能。 从组件生命周期https://guides.emberjs.com/v2.6.0/components/the-component-lifecycle/ 可以看出, 组件只会在初始化后从模板接收参数, 所以你可以像这样在下一个生命周期钩子中传递参数:

    ...
    myService: inject.service(),
    didReceiveAttrs() {
      this.get('myService').myFunction(this.get('myOptions'));
    }
    

    【讨论】:

      【解决方案2】:

      不,您不能在注入服务时将值传递给服务。根据您的设置,您正在做的是处理事情的最佳方式。但是有一个问题:您的服务是否应该在包含组件中启动?

      【讨论】:

        猜你喜欢
        • 2020-11-21
        • 2021-06-07
        • 2023-03-14
        • 2022-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多