2016-03-18 3 views
3

Я пытаюсь использовать альтернативный класс для Http в угловых 2.Альтернативного класса для Http с угловым 2

Я хочу сделать так, чтобы иметь параметры настройки класса CustomHttp по умолчанию в конструкторе

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

@Injectable() 
export class CustomHttp extends Http { 
    constructor(_backend: ConnectionBackend, _defaultOptions: RequestOptions) { 
     super(_backend, _defaultOptions); 
     let jwtHeader = localStorage.getItem('jwt'); 
     if (jwtHeader != null) { 
      this._defaultOptions.headers.append('Authorization', jwtHeader); 
     } 
     console.log("Pouet CustomHttp"); 
    } 
} 

Я пробовал различные варианты при загрузке, так как я хочу, чтобы эта перегрузка была глобальной для моего приложения.

Я пробовал:

bootstrap(AppComponent, 
    [HTTP_PROVIDERS, 
     ROUTER_PROVIDERS, 
     provide(Http, {useClass: CustomHttp,deps: [XHRBackend, BaseRequestOptions]}) 
    ]); 

она поднимает:

browser_adapter.ts:73 EXCEPTION: No provider for ConnectionBackend! (TAPComponent -> SensService -> Http -> ConnectionBackend) 

Я также попытался:

bootstrap(AppComponent, 
    [HTTP_PROVIDERS, 
     ROUTER_PROVIDERS, 
      provide(Http, {useFactory: 
       function(backend, defaultOptions) { 
        return new CustomHttp(backend, defaultOptions); 
       }, 
       deps: [XHRBackend, BaseRequestOptions]}) 
    ]); 

она поднимает:

browser_adapter.ts:73 EXCEPTION: No provider for BaseRequestOptions! (TAPComponent -> SensService -> Http -> BaseRequestOptions) 

Что мне делать?

Я использую бета 9.

ответ

2

Вы должны использовать завод, чтобы настроить его с RequestOptions вместо BaseRequestOptions:

bootstrap(AppComponent, [HTTP_PROVIDERS, 
    new Provider(Http, { 
    useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions), 
    deps: [XHRBackend, RequestOptions] 
    }) 
]); 

HTTP_PROVIDERS обеспечивает только RequestOptions не BaseRequestOptions.

BaseRequestOptions следует использовать, если вы хотите определить параметры пользовательского запроса, указав его подкласс.

+0

Большое спасибо ... Я так привык к java CDI, что не думал, что он не будет выбирать реализацию самостоятельно ... –

+0

Добро пожаловать! Фактически, «HTTP_PROVIDERS» предоставляет «RequestOptions» не 'BaseRequestOptions'. Да, я хорошо понимаю ;-) –

+0

все еще поддерживается для выхода angular2? –

Смежные вопросы