在Angular 2中手动注入Http
我已经创建了一个基本模型,在这个模型中,我拥有获取数据和发布或放置数据的所有常用函数。实际上,服务在角度上是做什么的,但我不想要服务 现在我计划做的是,基本模型将由系统中的所有模块扩展,每个模块都有其基本端点,以从API获取数据。如果我在基本模型中注入Http服务,并且用户模型扩展了基本模型,那么问题就来了,现在要创建一个基本模型的对象,我需要传递我无法传递的Http对象在Angular 2中手动注入Http,angular,Angular,我已经创建了一个基本模型,在这个模型中,我拥有获取数据和发布或放置数据的所有常用函数。实际上,服务在角度上是做什么的,但我不想要服务 现在我计划做的是,基本模型将由系统中的所有模块扩展,每个模块都有其基本端点,以从API获取数据。如果我在基本模型中注入Http服务,并且用户模型扩展了基本模型,那么问题就来了,现在要创建一个基本模型的对象,我需要传递我无法传递的Http对象 export class BaseModel { constructor (http: Http) {} fetch()
export class BaseModel {
constructor (http: Http) {}
fetch() {
let params = {
"includes": this.includes,
"page": page,
"filters" : this.filters,
"order" : this.orderDirection + this.orderColumn
};
return this.api.get("/"+this.endpoint, params)
.map(
(response: any) => {
let total = response.meta.total;
let current = response.meta.current;
let min = current - 5;
let max = current + 5;
if (min < 1) {
min = 1;
}
if (max > total) {
max = total;
}
else if (max < 10) {
if(total < 10) {
max = total;
}else {
max = 10;
}
}
let pages : number[] = [];
for (let i = min; i <= max; i++) {
pages.push(i);
}
this.pages = pages;
return response
}
);
}
}
更新(最终版)
constructor(){
让injector=ReflectiveInjector.resolveAndCreate([
Http,,
BrowserXhr,
{provide:RequestOptions,useClass:BaseRequestOptions},
{provide:ResponseOptions,useClass:BaseResponseOptions},
{provide:ConnectionBackend,useClass:XHRBackend},
{provide:XSRFStrategy,useFactory:()=>new-CookieXSRFStrategy()},
]);
this.http=injector.get(http);
}
原件(RC.x)
constructor(){
让injector=ReflectiveInjector.resolveAndCreate([HTTP_PROVIDERS]);
this.http=injector.get(http);
}
这将创建一个新的注入器(独立于Angular2应用程序的其余部分所使用的注入器)。这不一定是一个问题,您应该注意它
另请参见Angular 2.1中的丑陋解决方案
import {ReflectiveInjector} from '@angular/core';
import {Http, HttpModule} from "@angular/http";
const providers = (<any>HttpModule).decorators[0].args[0].providers;
const injector = ReflectiveInjector.resolveAndCreate(providers);
const http = injector.get(Http);
从'@angular/core'导入{reflectVeinjector};
从“@angular/Http”导入{Http,HttpModule};
常量提供程序=(HttpModule).decorators[0]。args[0]。提供程序;
const injector=ReflectiveInjector.resolveAndCreate(提供程序);
consthttp=injector.get(http);
您是否有此功能的RC.5+实现?这些版本中不再存在HTTP\U提供程序。您需要列出HttpModule
中的所有提供程序。我最近发布了一个类似问题的答案(仅在手机上)。您能告诉我在哪里找到httpFactory
(从哪里导入)我是个懒汉,你可能也是:import{Http,Response,Headers,RequestOptions,ResponseOptions,BrowserXhr,BaseRequestOptions,BaseResponseOptions,ConnectionBackend,XHRBackend,XSRFStrategy,CookieXSRFStrategy}来自“@angular/Http”;
import {ReflectiveInjector} from '@angular/core';
import {Http, HttpModule} from "@angular/http";
const providers = (<any>HttpModule).decorators[0].args[0].providers;
const injector = ReflectiveInjector.resolveAndCreate(providers);
const http = injector.get(Http);