2016-03-20 7 views
0

Ich habe etwas sehr einfach und schnell in ein paar Minuten erstellt, so dass es einfach zu reproduzieren ist.Injektion Service funktioniert nicht

habe ich eine App:

ionic start blank --v2 

dann erstelle ich einen Anbieter:

ionic g provider FacebookFriends 

ich diesen Code innerhalb von auf meinem Provider setzen dann:

import {Injectable, Inject} from 'angular2/core'; 
import {Http} from 'angular2/http'; 

/* 
    Generated class for the FacebookFriends provider. 

    See https://angular.io/docs/ts/latest/guide/dependency-injection.html 
    for more info on providers and Angular 2 DI. 
*/ 
@Injectable() 
export class FacebookFriends { 
    constructor(@Inject(Http) http) { 
    this.http = http; 
    this.data = null; 
    } 

    load() { 
    if (this.data) { 
     // already loaded data 
     return Promise.resolve(this.data); 
    } 

    // don't have the data yet 
    return new Promise(resolve => { 
     // We're using Angular Http provider to request the data, 
     // then on the response it'll map the JSON data to a parsed JS object. 
     // Next we process the data and resolve the promise with the new data. 
     this.http.get('path/to/data.json') 
     .map(res => res.json()) 
     .subscribe(data => { 
      // we've got back the raw data, now generate the core schedule data 
      // and save the data for later reference 
      this.data = data; 
      resolve(this.data); 
     }); 
    }); 
    } 
} 

ich dann versuchen Sie, dies in app.js zu injizieren:

import {App, Platform} from 'ionic-angular'; 
import {TabsPage} from './pages/tabs/tabs'; 
import {FacebookFriends} from './providers/facebook-friends/facebook-friends'; 

@App({ 
    template: '<ion-nav [root]="rootPage"></ion-nav>', 
    config: {}, // http://ionicframework.com/docs/v2/api/config/Config/, 
    providers: [FacebookFriends] 
}) 
export class MyApp { 
    static get parameters() { 
    return [[Platform]]; 
    } 

    constructor(platform, private _facebookFriends) { 
    this.rootPage = TabsPage; 

    platform.ready().then(() => { 
    }); 
    } 
} 

Das ist alles was ich getan habe. Wenn ich einen ionischen Dienst benutze, erhalte ich viele Fehler. Ich bekomme, dass es ein unbekanntes Token gibt und es zeigt auf die @Inject und @Injectable Worte. Ich bekomme auch einen unerwarteten Token an der private _facebookFriends Linie.

Auch wenn ich versuche, einen Typen zum Konstruktor hinzuzufügen, so würde ich haben platform:Platform und _facebookFriends:FacebookFriends Ich bekomme auch, dass die ':' unbekannte Token sind.

Ich versuche im Wesentlichen nur, einen Dienst von meinem app.js aufzurufen, aber es funktioniert nicht.

+0

Check-out [diese Antwort] (http://stackoverflow.com/a/35682570/3125880) – Abdulrahman

+0

wer oder wo dies -> this.data = null; ? –

Antwort

0

Http wird standardmäßig in Ionic bereitgestellt. Es ist genug, um einen Parameter an den Konstruktor hinzuzufügen:

import {Http} from 'angular2/http'; 


@Injectable 
export class FacebookFriends{ 
    constructor(private http:Http){} 
} 
0

Ich denke, dass Sie die FacebookFriends im parameters Getter hinzufügen müssen:

export class MyApp { 
    static get parameters() { 
    return [[Platform, FacebookFriends]]; 
    } 

    (...) 
} 

Das Array von Getter muss zurückgegeben alle passen die Parameter, die Sie im Konstruktor erwarten. Wenn Sie zwei Parameter haben, benötigen Sie zwei Parameter im Array. Wenn Sie den Dienst im Attribut providers definieren, wird nur angegeben, dass dieser eingegeben werden kann. Um es tatsächlich zu injizieren, müssen Sie es im parameters Getter definieren.

Sie müssen auch eine parameters Getter für Ihren Dienst definieren:

@Injectable() 
export class FacebookFriends { 
    static get parameters() { 
    return [[Http]]; 
    } 

    constructor(http) { 
    this.http = http; 
    this.data = null; 
    } 

    (...) 
} 

Sie können das mit ES6 bemerken, ist es nicht möglich ist, @Inject auf der Ebene der Konstruktor Parameter zu verwenden ...