Angular 2.0 - Injizierter HTTP-Dienst ist nicht definiert

9

Kommentar - Ich habe es geschafft, dieses Problem zu beheben, siehe unten in diesem Beitrag

Ich aktualisiere meine Angular 1.X-Anwendung mit UpgradeAdapter (ngUpgrade). Ich habe einen neuen Angular 2.0-Dienst hinzugefügt, den ich von meiner Angular 2.0-Komponente aus anrufe:

Service:

%Vor%

In meinem bootstrap.ts habe ich:

%Vor%

Was mache ich hier falsch?

BEARBEITEN :

Ich gebe meinem Angular 2.0-Dienst einen anderen Dienst (Angular 1.X-Upgrade-Dienst), und es funktioniert:

%Vor%

Bootstrap.ts:

%Vor%

BEARBEITEN 2 :

Als ich meinen ES5-Code sah, fand ich diesen Code:

%Vor%

Wie Sie sehen können -% http injection to MyService . Wenn ich meinen Dienstkonstruktor ändere, um diese Syntax zu verwenden

%Vor%

Jetzt bekomme ich den folgenden Fehler:

%Vor%

Lösung für das Problem:

So ist es mir schließlich gelungen, einen Hinweis aus @PierreDuc zu verwenden:

Ich habe den Konstruktor für MyService folgendermaßen geändert:

%Vor%

Und ich habe HTTP_PROVIDERS als Provider zu meiner Komponente hinzugefügt (die den Service nutzt): (in meiner ng 2 Komponente:)

providers: [MyService, HTTP_PROVIDERS]

Keine Notwendigkeit für @Injectable oder addProvider in meinem Bootstrap.

Ich verstehe nicht ganz, warum das passiert und warum diese Lösung funktioniert hat. Ich werde es gerne erklären, wenn jemand es hier weiß.

Lösung Bearbeiten:

Nach ein wenig Lesen verstehe ich jetzt DI besser. Ich kann das addProvider(HTTP_PROVIDERS) verwenden, anstatt einen Anbieter für jede Komponente zu definieren (es wird für alle Komponenten verfügbar sein). Das einzige Rätsel, das übrig bleibt, ist, warum private http: Http nicht funktioniert, während @Inject(Http) http funktioniert. Irgendeine Idee???

    
Yaniv Efraim 24.12.2015, 08:15
quelle

1 Antwort

4

Sie sollten das HTTP_PROVIDERS im Bootstrap und nicht nur Http hinzufügen. Probieren Sie dies für bootstrap.ts

aus %Vor%

Bearbeiten

Und darüber hinaus muss MyService.ts einen @Injectable() Dekorator haben, damit eckal weiß, dass es seine Abhängigkeiten injizieren muss. Der Grund für die Injektion von dataService ist, dass Sie den Dekorator @Inject verwendet haben. Probieren Sie dies für MyService.ts

aus %Vor%     
PierreDuc 24.12.2015, 08:31
quelle

Tags und Links