2016-09-16 116 views
0

我有以下服務:我注入Angular2服務不正確嗎? (Ionic2項目)

import { Injectable } from '@angular/core'; 
import {Http} from '@angular/http'; 
import 'rxjs/add/operator/map'; 

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

    constructor(private http:Http) { 

    } 

    searchMovies(movieName) { 
    var url = 'http://api.themoviedb.org/3/search/movie?query=&query=' + encodeURI(movieName) + '&api_key=5fbddf6b517048e25bc3ac1bbeafb919'; 
    var response = this.http.get(url).map(res => res.json()); 
    return response; 
    } 
} 

(我沒有真正確定的get參數功能的目的是什麼,因爲我來自一個例子得到它,但它的存在似乎並不是造成任何問題)

我試圖注入服務爲一體的組件:

import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 

import {MovieService} from '../../services/psa-web-api.service'; 


@Component({ 
    templateUrl: 'build/pages/browsed/browsed.html', 
    providers:[MovieService] 
}) 
export class BrowsedPage { 
    constructor(private movieService: MovieService, public navCtrl: NavController) { 
    } 
} 

但我每次服務通過它吐出以下控制檯錯誤的瀏覽器的應用程序和訪問時間:

EXCEPTION: Error: Uncaught (in promise): 
EXCEPTION: Error in ./MyApp class MyApp_Host - inline template:0:0 
ORIGINAL EXCEPTION: No provider for ConnectionBackend! ORIGINAL STACKTRACE: Error: DI Exception 

我一直沒能找到任何東西在網上關於此錯誤exept這個帖子這是不是超級有用的:https://groups.google.com/forum/#!topic/angular/z7jnb6goZUQ

編輯:添加此進一步的情況下,我國app.ts文件:

import { Component} from '@angular/core'; 
import { Platform, ionicBootstrap } from 'ionic-angular'; 
import {HTTP_PROVIDERS } from '@angular/http'; 

@Component({ 
    template: '<ion-nav [root]="rootPage"></ion-nav>', 
    providers: [] 
}) 
export class MyApp {...} 

ionicBootstrap(MyApp, [HTTP_PROVIDERS]); 

回答

1

app.ts看起來像這樣

import {HTTP_PROVIDERS} from '@angular/http'; 


@Component({ 
templateUrl: "build/app.html", 
    providers: [HTTP_PROVIDERS] 
}) 

然後

ionicBootstrap(MyApp) //without the HTTP_PROVIDERS 
+0

這修正了它!看起來好像'ionicBootstra()'不是像我認爲的那樣注入'HTTP_PROVIDERS'。 –

1

我不知道離子,所以我可能是錯的,但在Angular2 的HttpModule需要,以應對的Http。 (RC5的更高版本

import { HttpModule} from '@angular/http'; 

@NgModule({ 
    imports: [ 
    BrowserModule, 
    HttpModule,  //<------HttpModule is required to import 
], 
    declarations: [ AppComponent ], 
    bootstrap: [ AppComponent ] 
}) 

RC4

import {HTTP_PROVIDERS} from '@angular/http'; 

bootstrap(AppComponent, [ 
    HTTP_PROVIDERS,  //<-----need to inject here 
    .... 
]) 
+0

所以我其實沒有使用NgModule因爲我使用的是離子的版本依然在angular2 RC4(預模塊IIRC) –

+0

檢查更新的答案運行。但它仍然屬於Angular2。請注意我不知道離子。所以回答可能會或可能不會幫助你。 – micronyks

+0

我真的認爲這可能是問題,並立即提出問題後嘗試注入提供商那裏...唉,它並沒有解決我的問題。 –

0

嘗試沒有get parameters方法,因爲不再需要(這在Ionic2以前的版本我想使用,所以可能你得到的例子沒有更新)

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import 'rxjs/add/operator/map'; 

@Injectable() 
export class MovieService { 

    constructor(private http:Http) { 

    } 

    searchMovies(movieName) { 
    var url = 'http://api.themoviedb.org/3/search/movie?query=&query=' + encodeURI(movieName) + '&api_key=5fbddf6b517048e25bc3ac1bbeafb919'; 
    var response = this.http.get(url).map(res => res.json()); 
    return response; 
    } 
} 

也可以嘗試,而不用導入HTTP_PROVIDERS

import { HTTP_PROVIDERS } from '@angular/http';

所以你ionicBootstrap應該是這樣的:

ionicBootstrap(MyApp); 
+0

我試過這個以及無效:( –

+0

嗯......你能否使用這個[starter plunker](https://plnkr.co/edit/vEjjdH)並在那裏添加你的代碼?也許我們可以重現錯誤,並看看發生了什麼:) – sebaferreras

+0

請參閱上面的解決方案Ivaro18的答案。 –