web-dev-qa-db-de.com

Angular 2 HTTP "Alle Parameter für 'AppService' können nicht aufgelöst werden" "

Ich habe versucht, den http-Anbieter in einen Dienst zu importieren, erhalte jedoch die folgende Fehlermeldung:

Alle Parameter für 'AppService' (?) Können nicht aufgelöst werden. Stellen Sie sicher, dass alle Parameter mit Inject versehen sind oder über gültige Typanmerkungen verfügen und dass "AppService" mit Injectable verziert ist.

Hier sind einige Codeausschnitte:

<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 unkompliziertes Zeug, aber die Art, wie ich die HTTP-Module lade, scheint falsch zu sein. Jede Hilfe wird sehr geschätzt.

26
ddpdoj

Anscheinend verwenden Sie keinen TypeScript-Compiler, um Dateien in js umzuwandeln. In diesem Fall müssen Sie @Inject verwenden, während Sie Abhängigkeiten in einen Komponentenkonstruktor einfügen.

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());
    }
}
53
Pankaj Parkar

Eine andere Möglichkeit, die das Tippen in der Zukunft erspart, wäre:

in deinem tsconfig.json füge compilerOptions.emitDecoratorMetadata=true hinzu 

ein einfaches Beispiel für tsconfig.json wäre:

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  }
}
25
Yariv Katz

Ich hatte das gleiche Problem, und für mich bestand das Problem, dass mir import { HttpModule } from '@angular/http' in app.module.ts fehlte.

0
Leonardo López

Eine andere mögliche Lösung ist, dass Sie einige Polyfills fehlen. Wer mit anderen Antworten kein Glück hatte, sollte versuchen, diese Polyfüllung hinzuzufügen:

import 'core-js/es7/reflect';
0
sinedsem