23

Ich versuchte, den http-Provider in einen Dienst zu importieren, aber ich bin immer folgende Fehlermeldung:Angular 2 HTTP „lösen können nicht alle Parameter für‚AppService‘“

Cannot resolve all parameters for 'AppService'(?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'AppService' is decorated with Injectable.

Hier sind einige Code-Schnipsel:

<script src="~/es6-shim/es6-shim.min.js"></script> 
<script src="~/systemjs/dist/system-polyfills.js"></script> 

<script src="~/angular2/bundles/angular2-polyfills.js"></script> 
<script src="~/systemjs/dist/system.src.js"></script> 
<script src="~/rxjs/bundles/Rx.js"></script> 
<script src="~/angular2/bundles/angular2.dev.js"></script> 
<script src="~/angular2/bundles/http.dev.js"></script> 

<!-- 2. Configure SystemJS --> 
<script> 
    System.config({ 
     map: { 'rxjs': 'RCO/rxjs' }, 
     packages: { 
      RCO: { 
       format: 'register', 
       defaultExtension: 'js' 
      }, 
      'rxjs': {defaultExtension: 'js'} 
     } 
    }); 
    System.import('RCO/Areas/ViewOrganization/AngularTemplates/boot') 
     .then(null, console.error.bind(console)); 

boot.ts

import {bootstrap} from 'angular2/platform/browser' 
import {HTTP_PROVIDERS} from 'angular2/http' 
import 'rxjs/add/operator/map' 
import {AppComponent} from 'RCO/Areas/ViewOrganization/AngularTemplates/app.component' 
import {AppService} from 'RCO/Areas/ViewOrganization/AngularTemplates/app.service' 

bootstrap(AppComponent, [HTTP_PROVIDERS, AppService]); 

app.service.ts

import {Injectable} from 'angular2/core'; 
import {Http, Response} from 'angular2/http'; 
import {Observable} from 'rxjs/Rx'; 

@Injectable() 
export class AppService { 

    constructor(private http: Http) { } 

    // Uses http.get() to load a single JSON file 
    getTableData() { 
     return this.http.get('...').map((res: Response) => res.json()); 
    } 

} 

Ich versuche einen Controller auf dem Server aufzurufen, um eventuell eine JSON-Datei in eine Datentabelle zu laden. Ziemlich einfache Sachen, aber die Art, wie ich die Http-Module lade, scheint falsch zu sein. Jede Hilfe wird sehr geschätzt.

+0

verwenden Sie Typescript-Compiler? wenn nein dann wäre das der Fall http://stackoverflow.com/a/35350172/2435473 –

+0

Das hat es behoben ... Danke – ddpdoj

+1

Das sollte so funktionieren. Wenn Sie jedoch nicht TypeScript, sondern nur ES6 (keine Typunterstützung für Methodenparameter) verwenden, müssen Sie Angular2 zusätzliche Metadaten bezüglich der zu injizierenden Elemente angeben. In diesem Fall beschreibt der @ Pankaj genau, wie man das macht ;-) –

Antwort

49

Scheint, wie Sie nicht verwenden typescript Compiler für Dateien js transpiling, in diesem Fall, dass Sie @Inject haben müssen, während sie irgendwelche Abhängigkeiten innerhalb einer Komponente Konstruktor injiziert wird.

import {Injectable, Inject} from 'angular2/core'; 
import {Http, Response} from 'angular2/http'; 
import {Observable} from 'rxjs/Rx'; 

@Injectable() 
export class AppService { 
    constructor(@Inject(Http) private http: Http) { } 
    // Uses http.get() to load a single JSON file 
    getTableData() { 
     return this.http.get('...').map((res: Response) => res.json()); 
    } 
} 
+1

Das hat meine Stunden Zeit gespart. Vielen Dank. –

+0

Das hat funktioniert !. Könnten Sie mir sagen, was ist "transpiling" und wie Typoskript-Compiler zu tun, dass – dsk

+1

@DhananjayK eher als in Kommentaren zu erklären, würde ich sehr empfehlen, durch diesen Artikel zu gehen (https://scotch.io/tutorials/ javascript-transpilers-was-sie-sind-warum-wir-brauchen-sie) –

23

Eine andere Möglichkeit, es zu tun, das wäre etwas Tipp in Zukunft erspart: Ihr

in tsconfig.jsoncompilerOptions.emitDecoratorMetadata=true

Beispiel für einfache tsconfig.json wäre hinzuzufügen:

{ 
    "compilerOptions": { 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true 
    } 
} 
+4

Das hat meinen Tag gerettet! –

0

Ich hatte das gleiche Problem, und für mich war das Problem, dass ich import { HttpModule } from '@angular/http' infehlte 0

Verwandte Themen