2016-08-11 3 views
1

たびに取得:角度2つのRC5プロバイダは、新しいインスタンスに、我々はこのようなコンポーネントレベルでのプロバイダを宣言することができRC5まで

@Component({ 
    providers: [SomeService] 
}) 

そして、すべてのコンポーネントがSomeServiceの新しいインスタンスを取得しますが、今RC5とこのような影響をどのように達成するかについては、非推奨となっています。

+0

あなたが(HTTPS [RC5移行ガイドにRC4]を経由してもらえ.io/docs/ts/latest/cookbook/rc4-to-rc5.html)? –

+0

しました!見つけられなかったり、答えを逃した... – Bazinga

+0

私はこの質問は真実だとは思わない。クイックスタートに従えば、コンポーネントのプロバイダとしてサービスが呼び出されます。 – Bean0341

答えて

-1

クイックスタートhereによれば、サービスは実際には変更されていません。まだサービスは、そのサービス

4 3.provide成分

にそのサービス2.import注射

を介して作成され、それを構成された4つのコアもの

  1. が必要export

+0

このhttp://gorj.blogspot.co.il/2016/08/angular-2-rc5-ngmodules-lazy-loading.htmlを参照してください。 – Bazinga

+0

はい、これはrc.5のモジュールの新しい概念を説明しています(クイックスタート)しかし、公式のドキュメントは、私が上記で説明した方法でサービスを使用しています。 – Bean0341

+0

これはまだRC4をサポートしているからだと思います。 – Bazinga

1

新しいインスタンスを返すファクトリメソッドをサービスに追加する方法もあります。

export class SomeService { 

    constructor(private http: Http) {} 

    create() { 
     return new SomeService(this.http); 
    } 

} 

これは非常にハックであり、コンポーネントでcreateを呼び出す必要があります。

サブスクライブされた解決策は、Factory Providerを使用するようです。

基本的に、あなたは、ファクトリメソッドとプロバイダオブジェクトを作成します。

import { Http } from '@angular2/core'; 
import { SomeService } from './SomeService'; 

let someServiceFactory = (http: Http) => { 
    return new SomeService(http); 
}; 

export let SomeServiceProvider = 
    { provide: SomeService, 
    useFactory: someServiceFactory, 
    deps: [Http] 
    }; 

あなたが前にやったように、今あなたがSomeServiceを注入し、あなたは常に新しいtransientインスタンスを取得します。

インポートあなたのモジュールまたはコンポーネントにプロバイダとproviders: [someServiceProvider]

としてそれを登録したり、としてそれをインライン://角度:

providers: [{ 
    provide: SomeService, 
    useFactory: (http: Http) => { return new SomeService(http)}, 
    deps: [Http] 
}] 
関連する問題