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);
});
});
}
}
HttpClient
class的代码:
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]]]
但我没有办法验证它。