2017-11-11 289 views
1

我有一个组件,比如说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'传递给服务,而不是调用服务中的另一个函数。

回答

0

不,您注入时无法将值传递给服务。你正在做的是处理给定你的设置的最佳方式。但是一个问题是:你的服务应该放在包含的组件中吗?

1

我想你不能。 正如您可以从组件的生命周期https://guides.emberjs.com/v2.6.0/components/the-component-lifecycle/看到, 组件将从模板接收参数初始化后只, 这样你就可以在下一周期挂钩这样的传递参数:

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