2016-07-12 5 views
1

私は検索しようとしましたが、私は答えを得ていませんでした。角2:コンポーネントにプロバイダセクションが必要なときは?

@コンポーネント定義で "プロバイダ"セクションを定義する必要があるときはわかりません。 例を見ました。それらの 半分は "プロバイダ" セクションなし 1)

import { Component, blah-blah} from '@angular/core'; 
import { SomeService } from './some.service'; 

@Component({ 
    selector: 'example-selector', 
    providers: [SomeService ], 
..... 
constructor(public someService : SomeService , 

2)が、それらの半分を使用します!

import { Component, blah-blah} from '@angular/core'; 
import { SomeService } from './some.service'; 

@Component({ 
    selector: 'example-selector', 

..... 
constructor(public someService : SomeService , 

===

ので、私は混乱しています:私がいないとき、私はそのセクションを必要とするとき?

答えて

0

私はあなたがあなたのプロバイダを宣言するレベルと関係していると信じています。使用するコンポーネントまたはサービスごとにプロバイダを宣言する必要があります

たとえば、私のアプリケーションでは、main.tsで提供するサービスを提供しています。

bootstrap(AppComponent, 
 
    [ 
 
     APP_ROUTER_PROVIDER, 
 
     HTTP_PROVIDERS, 
 
     SettingsService, 
 
     disableDeprecatedForms(), 
 
     provideForms() 
 
    ]).catch((err: any) => console.error(err)); 
 

 

 

 
@Component({ 
 
    selector: 'kg-Settings ', 
 
    templateUrl: './app/components/settings/settings.component.html', 
 
    styleUrls: ['./app/components/settings/settings.component.css'], 
 
    directives: [ROUTER_DIRECTIVES, REACTIVE_FORM_DIRECTIVES] 
 
})

しかし、私は別のコンポーネントにコンポーネントを注入したいと、それは以前に、アプリのツリー内のより高いレベルでのために提供されていない場合

@Component({ 
 
    selector: 'k-Calculator ', 
 
    templateUrl: './app/components/calculator/calculator.component.html', 
 
    styleUrls: ['./app/components/calculator/calculator.component.css'], 
 
    directives: [ROUTER_DIRECTIVES, REACTIVE_FORM_DIRECTIVES, Panel, Dropdown, SelectButton, Button], 
 
    providers: [CalculationService] 
 
})

0

サービスを使用する必要があるときはいつでもプロバイダセクションが必要です。そのコンポーネント。

アイテム#1は、コンポーネント内のプロバイダを定義しました。

アイテム#2、app.component.tsでプロバイダを定義した(かもしれない)(メインのファイルを確認してください)

0

私はMaxouhellanother questionthe right answerを与えたと考えている:

あなたを提供する場合あなたのコンポーネントの中にサービスがあれば、それはローカルになります。コンポーネントのインスタンスが2つある場合は、サービスのインスタンスが2つあります。

サービスをモジュール内に提供すると、グローバルになり、コンポーネントのインスタンスが2つある場合、サービスの同じインスタンスが共有されます。

関連する問題