Angular2 バージョン 2.2 の場合 (2016 年 12 月現在)
RC5 からの Angular はHTTP_PROVIDERS
非推奨としてマークされ、物事を に移行しようとし@NgModule
ています。上記の解決策は実際には適用されないため、ドキュメント. 他のいくつかの回答を相互参照し、ベース URL を実装する方法を見つけました。これが他の人に役立つことを願っています。
基本的な考え方は、ブートストラップで物事を行う代わりに、物事を に移動することAppModule
です。
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule, RequestOptions } from '@angular/http';
import { CustomRequestOptions } from './customrequest.options';
@NgModule({
declarations: [
AppComponent,
...
],
imports: [
BrowserModule,
HttpModule,
...
],
providers: [
{ provide: RequestOptions, useClass: CustomRequestOptions }
],
bootstrap: [ AppComponent ]
})
CustomRequestOptions を別の注入可能なサービスに移動します。
import { Injectable } from '@angular/core';
import { BaseRequestOptions, RequestOptions, RequestOptionsArgs } from '@angular/http';
@Injectable()
export class CustomRequestOptions extends BaseRequestOptions {
merge(options?:RequestOptionsArgs):RequestOptions {
options.url = 'http://localhost:9080' + options.url;
return super.merge(options);
}
}
GET以外のリクエストメソッド用に編集。
GET 以外のリクエスト タイプを送信しようとしている場合、前の方法では baseurl をリクエストに挿入できません。これは、Angular2が、マージ メソッドが CustomRequestOptions によってオーバーライドされていないRequestOptions
以外の新しいものを生成するためです。this._defaultOptions
(ソースコードはこちら)。
super.merge(...)
そのため、CustomRequestOptions マージ メソッドの最後のステップで戻る代わりに、新しいインスタンスを生成しCustomRequestOptions
て、次の操作が確実に機能するようにしました。
import { Injectable } from '@angular/core';
import { RequestOptions, RequestOptionsArgs } from '@angular/http';
@Injectable()
export class CustomRequestOptions extends RequestOptions {
merge(options?: RequestOptionsArgs): RequestOptions {
if (options !== null && options.url !== null) {
options.url = 'http://localhost:9080' + options.url;
}
let requestOptions = super.merge(options)
return new CustomRequestOptions({
method: requestOptions.method,
url: requestOptions.url,
search: requestOptions.search,
headers: requestOptions.headers,
body: requestOptions.body,
withCredentials: requestOptions.withCredentials,
responseType: requestOptions.responseType
});
}
}
これは、POST、PUT、DELETE メソッドでも機能します。これが役に立てば幸いです。