Angular ';没有提供商';自定义Http实现出错

Angular ';没有提供商';自定义Http实现出错,angular,Angular,我正在尝试编写一个类,该类将扩展Http,并向每个请求添加头,但当我尝试将该类注入提供者时,出现以下错误: browser_adapter.ts:73 EXCEPTION: Error: Uncaught (in promise): No provider for HttpClient! (ListPage -> DealProvider -> HttpClient) 供应商代码: import {Injectable} from 'angular2/core'; import {

我正在尝试编写一个类,该类将扩展
Http
,并向每个请求添加头,但当我尝试将该类注入
提供者时,出现以下错误:

browser_adapter.ts:73 EXCEPTION: Error: Uncaught (in promise): No provider for HttpClient! (ListPage -> DealProvider -> HttpClient)
供应商代码:

import {Injectable} from 'angular2/core';
import {HttpClient} from './http-client';
import 'rxjs/add/operator/map';

/*
 Generated class for the DealProvider provider.

 See https://angular.io/docs/ts/latest/guide/dependency-injection.html
 for more info on providers and Angular 2 DI.
 */
@Injectable()
export class DealProvider {
    static get parameters() {
        return [[HttpClient]]
    }

    constructor(http) {
        this.http = http;
        this.data = null;
    }

    load() {
        if (this.data) {
            return Promise.resolve(this.data);
        }

        return new Promise(resolve => {
            this.http.get('http://apiary-mock.com/deal/list/?page=1&search=ahoj&category=1&city=1')
                .map(res => res.json())
                .subscribe(data => {
                    this.data = data;
                    resolve(this.data);
                });
        });
    }
}
HttpClientclass的代码:

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

@Injectable()
export class HttpClient {
    static get parameters() {
        return [[Http], [Headers]]
    }

    constructor(http, headers) {
        this.http = http;
    }

    createHeaders(headers) {
        headers.append('AppVersion', '1.0.0');
        headers.append('DeviceIdent', 'uuid');
        headers.append('Session', 'sdawdbkj213345b345hj3b45');
    }

    get(url) {
        let headers = new Headers();
        this.createHeaders(headers);
        return this.http.get(url, {
            headers: headers
        });
    }
}

您需要在以下位置提供HTTP\u提供程序:

bootstrap(AppComponent, [HTTP_PROVIDERS])

我在您的服务中看到一个错误:

@Injectable()
export class HttpClient {
  static get parameters() {
    return [[Http, Headers]]
  }
  (...)
}
此外,您需要让提供程序在注入
DealProvider
类的组件中“可见”。它可以位于部件本身或喷油器树的上部:

  • 在组件中:

    @Component({
      (...)
      providers: [ DealProvider ]
    })
    export class SomeComponent {
      (...)
    }
    
    bootstrap(AppComponent, [ DealProvider ]);
    
  • 对主要部件进行增压时:

    @Component({
      (...)
      providers: [ DealProvider ]
    })
    export class SomeComponent {
      (...)
    }
    
    bootstrap(AppComponent, [ DealProvider ]);
    
请注意,喷油器仅连接到部件,而不是服务

有关更多详细信息,请参见此问题:


默认情况下,提供程序包含Http,为了在应用程序中使用Http,您需要将HttpModule添加到
app.module.ts:
imports 加


HttpModule
HttpClientModule
添加到importrs

看起来像
[[Http,Headers]]
应该是
[[Http],[Headers]]]
但我没有办法验证它。