2016-01-20 75 views
1

我正在使用angular2並在將Http注入到其他服務時遇到問題。Angular2:向服務注入Http問題

這裏是我的boot.ts文件:

import { bootstrap } from 'angular2/platform/browser'; 
import { provide } from 'angular2/core'; 
import { AppComponent } from './app.component'; 
import { appInjector } from './app-injector'; 
import { LoginService } from './services/login.service'; 
import { HTTP_PROVIDERS, Http } from 'angular2/http'; 
import { RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, 
     LocationStrategy, HashLocationStrategy} from 'angular2/router'; 

bootstrap(AppComponent, 
    [ROUTER_PROVIDERS, LoginService, provide(
     LocationStrategy, {useClass: HashLocationStrategy} 
     )] 
    ).then((appRef) => { 
    // store a reference to the injector 
    appInjector(appRef.injector); 

}); 

這裏是我的app.component.ts文件:

import {Component} from 'angular2/core'; 
import {RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, 
     LocationStrategy, HashLocationStrategy} from 'angular2/router'; 
import {LoginService} from './services/login.service'; 
import {HTTP_PROVIDERS, Http} from 'angular2/http'; 

@Component({ 
    selector: 'my-app', 
    templateUrl: 'app/templates/app.tpl.html', 
    directives: [ROUTER_DIRECTIVES], 
    providers: [LoginService, HTTP_PROVIDERS] 
}) 

export class AppComponent { 

    constructor(private _loginService: LoginService) { } 


    login() { 
     this._loginService.login(); 
    } 
} 

這裏是有問題的login.service.ts文件:

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

@Injectable() 

export class LoginService{ 

    http: Http; 

    constructor(_http: Http) { 
     this.http = _http; 
    } 

    login(){ 
     // do sth 
    } 
} 

的問題是與constructor在中文件。

當我刪除構造函數中的參數(離開constructor(){})頁面呈現正常。當我保留Http參數時,頁面不呈現,而是在瀏覽器控制檯中看到:Uncaught SyntaxError: Unexpected token <錯誤。

我需要將Http注入我的LoginService,但我找不到問題所在。我已經看過一些博客和SO問題,即here,但沒有運氣。

回答

0

我想你忘記了http.dev.js文件添加到您的HTML文件:

<script src="node_modules/angular2/bundles/http.dev.js"></script> 

這應該是你錯誤的原因:「意外的標記<」。

希望它能幫到你, Thierry

0

您在兩個文件中使用Http模塊,但HTTP_PROVIDERS導入僅在組件中。從組件中刪除它並添加到引導文件中。

bootstrap(AppComponent, 
    [HTTP_PROVIDERS, ROUTER_PROVIDERS, LoginService, provide(
     LocationStrategy, {useClass: HashLocationStrategy} 
     )] 
    ).then((appRef) => { 
    // store a reference to the injector 
    appInjector(appRef.injector); 

});