2015-12-22 2 views
3

Я начинаю и играю с Ionic2 (написан на Angular2). Мне нужна помощь для решения проблемы с Injection Dependency в моей собственной службе.Angular2 - Ionic 2: Injection in Service не работает

Вот мой код

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

@Injectable() 
export class Api { 
    constructor(public http: Http) { 
     console.log('api', http); // http is always undefined. 
    } 
} 


api = new Api(); 

Другое дело, это работает.

import {Component, View} from 'angular2/angular2'; 
import {IONIC_DIRECTIVES} from 'ionic/ionic'; 
import {Http, Headers} from 'angular2/http'; 
import {Storage, LocalStorage} from 'ionic/ionic'; 

@Component({ 
    selector: 'auth-login' 
}) 

@View({ 
    templateUrl: 'app/auth_login/auth_login.html', 
    directives: [IONIC_DIRECTIVES] 
}) 

export class AuthLogin { 
    constructor(http: Http) { 
    console.log('login', http); // it works 
    } 
} 

Спасибо всем.

+1

Могут ли вы быть немного более конкретно о том, что этот вопросе вы испытываете это? – Zyzle

+0

Извините, я знаю, что это меньше информации для решения, но мой код очень прост. Я добавил директиву, которую я написал, она работает. –

+1

Я нашел решение. Я должен использовать инъекцию зависимостей, а не конструктор. –

ответ

1

Вы должны объявить службу, где вы хотите использовать его

@Component({ 
    selector: 'auth-login', 
    providers: [Api] 
}) 
+0

или в 'bootstrap (AppComponent, [Api])', чтобы сделать его доступным (и singleton) в масштабе всей программы –

+0

bootstrap() обрабатывается самим ионом, вам нужно использовать '@ App' и' @ Page' – Raphael

+0

I см., спасибо за отзывы. –

3

Инъекция услуг в ионическом пройти через определение провайдеров, например, @App аннотацию

http://jbavari.github.io/blog/2015/10/19/angular-2-injectables/

@App({ 
    templateUrl: 'app/app.html', 
    providers: [DataService] 
    /* 
    Here we're saying, please include an instance of 
    DataService for all my children components, 
    in this case being sessions, speakers, 
    and session detail. 
    */ 
}) 
class ConferenceApp { 
    constructor(platform: Platform, data: DataService) { 
    data.retrieveData(); 
    } 
} 

Это будет правильно экземпляр сервиса и сделать его доступным для инъекций

0

У меня была аналогичная проблема, работая с ионического 2 и угловыми 2. У меня есть app.ts и login.ts и user-data.ts (Как и ваш api.ts).

< app.ts - login.ts < - пользовательский data.ts

Все начал работать, когда я ставлю класс UserData в качестве поставщика в login.ts и app.ts.

app.ts, как это:

@Component({ 
    templateUrl: 'build/app.html', 
    directives: [ROUTER_DIRECTIVES], 
    providers: [ 
    { 
     provide: TranslateLoader, 
     useFactory: (http: Http) => new TranslateStaticLoader(http, 'assets/i18n', '.json'), 
     deps: [Http] 
    }, 
    TranslateService, 
    ROUTER_PROVIDERS, 
    UserData 
    ] 
}) 

login.ts, как это

import {Page, NavController} from 'ionic-angular'; 
import {UserData} from '../../providers/user-data-provider/user-data'; 

@Page({ 
    templateUrl: 'build/pages/login/login.html', 
    providers: [UserData] 
}) 
export class LoginPage { 
... 
} 

и пользовательских data.ts, как это

import {Injectable} from '@angular/core'; 
import {Storage, LocalStorage, Events} from 'ionic-angular'; 


@Injectable() 
export class UserData { 
    ... 
} 

Я использую:

C:\ionic2\myapp>npm list -depth=0 

+-- @angular/[email protected] 
+-- @angular/[email protected] 
+-- @angular/[email protected] 
+-- @angular/[email protected] 
+-- @angular/[email protected] 
+-- @angular/[email protected] 
+-- @angular/[email protected] 
+-- @angular/[email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
`-- [email protected] 

Надеется, что это помогает

 Смежные вопросы

  • Нет связанных вопросов^_^