2016-12-23 4 views
0

Я следую этой здесь How do I set default Http Headers for all requests in Ionic 2?Ionic2 По умолчанию заголовков HTTP

Это прекрасно работает и во всех HTTP называет это передать заголовки я вставил. Но моя проблема в том, что я ввожу любую услугу этому конструктору MyRequestOptions, эта служба не определена и не может ее использовать ...

Кто-нибудь знает почему? Мне нужно ввести здесь свой собственный AuthService, чтобы также поставить токен JWT.

ответ

2

Это потому, что BaseReqestOptions использует @Injectable, в случае которого вместо конструктора подкласса вызывается конструктор BaseRequestOptions. Таким образом, вы можете либо:

Используйте фабрику

providers: [{ 
    provide: RequestOptions, 
    deps: [ Config ], 
    useFactory: (config: Config) => { 
    return new DefaultRequestOptions(config); 
    } 
}] 

Это позволит создать на службе самостоятельно, без Угловая пытается внедрить его. Или вы могли бы

Продлить RequestOptions вместо

@Injectable() 
class DefaultRequestOptions extends RequestOptions { 
    constructor(public config: Config) { 
    super({method: RequestMethod.Get, headers: new Headers()}) 

    this.headers.append('data', this.config.data); 
    } 
} 

RequestOptions не украшен @Injectable. И если вы посмотрите на the source code for BaseRequestOptions, вы увидите, что все это делает то же самое, что мы делаем выше (с вызовом super).

мне нужно вводить здесь свой собственный AuthService также поставить JWT маркер

Вы должны быть осторожны с этим, если AuthService впрыскивает Http. Вы можете получить ошибку циклической зависимости (потому что Http использует RequestOptions, а ваш RequestOptions нуждается в Http). Один из способов справиться с этим - ввести Injector, а не Http в услугу. Затем только getHttp от Injector.

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