注入服务的问题

时间:2016-02-24 14:35:04

标签: angular jspm

我有一个Angular2应用程序,我在其中创建了一个服务。现在我想扩展服务以从Web API获取一些数据。我跟随角度团队的开发者指南: https://angular.io/docs/ts/latest/guide/server-communication.html

阅读有关注入服务的精美指南: http://blog.thoughtram.io/angular/2015/09/17/resolve-service-dependencies-in-angular-2.html

但我一直得到同样的错误:

  

无法解析' UserService'(?)的所有参数。确保所有参数都使用Inject进行修饰或具有有效的类型注释以及“UserService'用Injectable装饰。

我在boostrap中添加了两个提供:

import "zone.js/dist/zone.min.js";
import "reflect-metadata";
import 'rxjs/Rx';
import { HTTP_PROVIDERS }    from 'angular2/http';
import { bootstrap } from "angular2/platform/browser";
import { UserService } from '../userservice';
import { PublicappComponent } from './publicapp.component';

bootstrap(PublicappComponent, [HTTP_PROVIDERS, UserService]);

这是我的简单UserService.ts:

import {Injectable}     from 'angular2/core';
import {Http, Response} from 'angular2/http';
import {Observable}     from 'rxjs/Observable';
import {Headers, RequestOptions} from 'angular2/http';
import {UserModel}      from './usermodel';

@Injectable()
export class UserService {
    constructor(http: Http) { }
    private url = 'api/user';
}

我在Angular2周围使用jspm。

1 个答案:

答案 0 :(得分:0)

您是否在您的HTML条目文件中包含http.dev.js文件:

(...)
<script src="https://code.angularjs.org/2.0.0-beta.7/angular2.dev.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.7/http.dev.js"></script>

修改

由于Jspm允许实现基于ES6的Angular2应用程序(不是TypeScript),因此您无法使用方法参数级别的类型。因此,您需要为parameters字段添加静态getter:

@Injectable()
export class UserService {
  private url = 'api/user';

  constructor(http) { }

  static get parameters() {
    return [[Http]];
  }
}

有关详细信息,请参阅此plunkr:https://plnkr.co/edit/ymSUUCvG5NFvmCGqzj2r?p=preview