4

Ich habe eine Komponente, die einen Dienst verwendet. Die Komponente sieht ungefähr so ​​aus:Wie kann ich in Angular 2 Provider zu einer Serviceklasse hinzufügen?

@Component({ 
    moduleId: module.id, 
    selector: 'test', 
    providers: [HTTP_PROVIDERS, TestService] 
}) 
export class TestComponent implements OnInit { 

    constructor(private _testService:TestService) { 
    } 

Wie Sie sehen können, habe ich die HTTP_PROVIDERS Anbieter in meiner Komponente hinzugefügt. Dies funktionierte, da der DI nun die Klassen http kennt. Allerdings war es meine TestService, die wirklich die Http Klasse verwendete, nicht meine TestComponent.

@Injectable() 
export class TestService { 

    constructor(private _http:Http) { 
    } 

Ich fühlte, dass da es der Dienst mit der Http Klasse ist, sollte es derjenige mit den Anbietern in sich. Die TestComponent würde nicht wissen, welche Anbieter TestService benötigen würden.

Da die Service-Klasse nicht diese Komponente Dekorator hat, bin ich mir nicht sicher, wie ich tatsächlich Anbieter hinzufügen kann. Wie kann ich Provider zu einer Service Klasse hinzufügen?

Antwort

3

Was können Sie tun, ist,

Inject HTTP_PROVIDERS in bootstrap function,

import {HTTP_PROVIDERS} from '@angular/http'; 
bootstrap(AppComponent,[HTTP_PROVIDERS]); 

und in Ihren Diensten,

import {Http} from '@angular/http'; 

@Injectable() 
export class TestService { 
    constructor(private _http:Http) {} 
} 
+1

Vielleicht ist es noch sinnvoll 'HTTP_PROVIDERS' in der Bootstrap-Funktion zu setzen da es ziemlich oft benutzt wird. Was aber, wenn es andere Klassen gibt, die nur in diesem Dienst verwendet werden? Es wäre nicht sehr gut, es durch die Bootstrap-Funktion auf jeder Seite einzubinden. Wäre es besser, wenn der Anbieter nur in der Serviceklasse selbst enthalten ist? – Carven

+0

Was bedeuten Sie, wenn der Anbieter nur in der Serviceklasse selbst enthalten ist? – micronyks

+0

Ich meine, wenn es einen Anbieter gibt, der nur von einem bestimmten Dienst verwendet wird, wäre es mir möglich, diesen Anbieter nur innerhalb der Datei dieses Dienstes zu deklarieren? – Carven