Angular2:将Http注入服务

时间:2016-01-20 21:22:41

标签: service dependency-injection angular

我正在使用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文件中的login.service.ts

当我删除构造函数中的参数(离开constructor(){})时,页面呈现正常。当我保留Http参数时,页面不会呈现,而是在浏览器控制台中看到:Uncaught SyntaxError: Unexpected token <错误。

我需要将Http注入我的LoginService,但我找不到问题所在。我已经查看了一些博客和SO问题,即here,但没有运气。

2 个答案:

答案 0 :(得分: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);

});

答案 1 :(得分:0)

我认为您忘记将http.dev.js文件添加到HTML文件中:

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

这应该是您的错误的原因:&#34;意外的令牌&lt;&#34;。

希望它可以帮到你, 亨利