Провайдер внутри провайдера в приложении Ionic2/ Angular2
У меня есть два поставщика.
AppStorage, который отвечает за установку и получение значений из хранилища.
import { Injectable } from '@angular/core'; import {Http, Headers, RequestOptions} from '@angular/http'; import {Observable} from 'rxjs/Rx'; import {Storage} from '@ionic/storage'; @Injectable() export class AppStorage { constructor(public http: Http, private storage:Storage) { console.log('Hello Appstorage Provider'); } setValue(key,value){ var setPromise = new Promise((resolve,reject)=>{this.storage.set(key,value).then((res)=>{ return resolve(res); }) }); return setPromise; }; getValue(key){ var getPromise = new Promise((resolve,reject)=>{this.storage.get(key).then((val)=>{ return resolve(val); }); }); return getPromise; } }
OauthService, который является моим сервисом API.
import {Http, Headers, RequestOptions} from '@angular/http'; import { Injectable, Inject} from '@angular/core'; import 'rxjs/add/operator/map'; import { AppStorage } from '../providers/appstorage'; @Injectable() export class OauthService{ http: Http; response :any; appStorage: AppStorage; static get parameters() { return [[Http]]; } constructor(http: Http,@Inject(AppStorage) appStorage: AppStorage){ this.http = http; this.appStorage = appStorage; setTimeout(()=>{ console.log('Hello OauthService Provider'+this.appStorage+"===="+this.http); },3000) //output - >Hello OauthService Providerundefined====[object Object] } }
Теперь я добавляю оба инъекционных в мой app.module
import { NgModule, ErrorHandler } from '@angular/core';
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { MyApp } from './app.component';
import { LoginPage } from '../pages/login/login';
import { AppStorage } from '../providers/appstorage';
import { Storage } from '@ionic/storage';
import { OauthService } from '../providers/oauthservice';
@NgModule({
declarations: [
MyApp,
LoginPage
],
imports: [
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
LoginPage
],
providers: [{provide: ErrorHandler, useClass: IonicErrorHandler},OauthService, Storage, AppStorage]
})
export class AppModule {}
Но когда я запускаю приложение, объект appStorage в конструкторе oauthService становится неопределенным. подскажите, пожалуйста, какую ошибку я делаю, я просто ввожу услугу в другой службе.
1 ответ
Решение
Ваш метод получения статических параметров (параметры) в поставщике OauthService должен включать всех поставщиков, которые вы вводите в конструктор. Однако вы ввели только провайдера Http, но не провайдера AppStorage. Я изменил код соответственно ниже:
import { Http } from '@angular/http';
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
import { AppStorage } from './appstorage';
@Injectable()
export class OauthService {
response :any;
static get parameters() {
return [[Http], [AppStorage]];
}
constructor(private http: Http, private appStorage: AppStorage) {
setTimeout(() => {
console.log('Hello OauthService: appStorage=' + this.appStorage + ", http=" + this.http);
}, 3000)
//output - >Hello OauthService: appStorage=[object Object], http=[object Object]
}
}