2017-11-11 6 views
1

私はコンポーネント、例えばMyComponentを持っています。私はこのコンポーネントにサービスを注入しました、MyServiceと言います。注入時にエバーサービスに引数を渡すにはどうしたらいいですか?

'MyComponent'が別のコンポーネント(ParentComponentなど)の内部で使用されている場合、テンプレートを介していくつかの引数が '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')); 
} 
関連する問題