在Angular 2中手动注入Http

在Angular 2中手动注入Http,angular,Angular,我已经创建了一个基本模型,在这个模型中,我拥有获取数据和发布或放置数据的所有常用函数。实际上,服务在角度上是做什么的,但我不想要服务 现在我计划做的是,基本模型将由系统中的所有模块扩展,每个模块都有其基本端点,以从API获取数据。如果我在基本模型中注入Http服务,并且用户模型扩展了基本模型,那么问题就来了,现在要创建一个基本模型的对象,我需要传递我无法传递的Http对象 export class BaseModel { constructor (http: Http) {} fetch()

我已经创建了一个基本模型,在这个模型中,我拥有获取数据和发布或放置数据的所有常用函数。实际上,服务在角度上是做什么的,但我不想要服务

现在我计划做的是,基本模型将由系统中的所有模块扩展,每个模块都有其基本端点,以从API获取数据。如果我在基本模型中注入Http服务,并且用户模型扩展了基本模型,那么问题就来了,现在要创建一个基本模型的对象,我需要传递我无法传递的Http对象

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);