2016-06-16 6 views
0

Ich habe einen Dienst wie folgt definiert:Injector funktioniert nicht wie erwartet in Angular2/Ionic2

//storageService.ts 
import { Injectable } from '@angular/core'; 
import {Storage, SqlStorage} from 'ionic-angular'; 

@Injectable() 
export class StorageService { 
    storage: any; 

    constructor() { 
     this.storage = new Storage(SqlStorage); 
    } 

    getUser() { 
     return this.storage.get('user'); 
    } 

} 

ich dies, wie unten in einer anderen Klasse Injektion:

Profile.ts 
import {StorageService} from '../../services/storageService'; 

@Page({ 
    templateUrl: 'build/pages/profile/profile.html', 
    providers: [StorageService] 
}) 
export class ProfilePage { 


    constructor(private http: Http, storageService: StorageService) { 
     this.storageService.getUser().then(user => { 
      this.user = JSON.parse(user); 
     }).catch(error => { 
      console.log(error); 
     }); 

    } 

} 

jedoch halten i den Fehler zu erhalten :

Cannot read property 'getUser' of undefined 

seit ich den Service in den Konstruktor einfüge..Howcome bekomme ich diesen Fehler?

+0

Haben Sie 'Anbieter hinzufügen: [HTTP_PROVIDERS]' in '@App (...)' ? –

+0

gibt es hier keinen HTTP-Anruf – runtimeZero

+0

Keine Ahnung, was du meinst. Er wird von 'constructor (private http: Http, ' –

Antwort

1

Weil Sie Typoskript verwenden Sie den Anbieter als private oder public im Konstruktor definieren müssen, und dies wird eine automatisch erstellen Instanz des Anbieters innerhalb der Seite Klasse, zum Beispiel:

constructor(private http: Http, private storageService: StorageService) { 
     this.storageService.getUser().then(user => { 
      this.user = JSON.parse(user); 
     }).catch(error => { 
      console.log(error); 
     });  
    } 

Andere Antworten auf Ihre Frage, die JavaScript-Lösung bereitzustellen, die für Sie nicht funktionieren.

0

Soweit ich weiß, Sie parameters Getter in Ionic wie ein statischen brauchen:

@Page({ 
    templateUrl: 'build/pages/profile/profile.html', 
    providers: [StorageService] 
}) 
export class ProfilePage { 

    static get parameters() { 
     return [[Http], [StorageService]]; 
    } 

    constructor(private http: Http, storageService: StorageService) { 
     this.storageService.getUser().then(user => { 
      this.user = JSON.parse(user); 
     }).catch(error => { 
      console.log(error); 
     }); 
    } 
} 
+0

Wie funktionieren statische Parameter? – John

+0

Dies ist eine Methode, mit der Angular DI herausfinden kann, was an 'constructor (...)' übergeben werden muss ein Array von Typen in der gleichen Reihenfolge wie die Konstruktorparameter zu sein.Im obigen Fall sucht DI nach einem Provider für "Http" und "StorageService" und übergibt sie an den Konstruktor. Ich kenne Ionic nicht, aber es scheint so In normalen Angular2-Apps kann DI die Informationen von den Typen in der Konstruktorsignatur abrufen, und es funktioniert auch wie oben in ES5 erklärt .. Ich nehme an, das Build-Tool von Ionic (Babel?) speichert diese Art von Informationen nicht. –

0

Offenbar habe ich Typoskript falsch verwendet.

Hatte storageService wie unten zu erklären:

constructor(private http: Http,private storageService: StorageService) { 

dh ich fehlte der privaten Stichwort

Verwandte Themen