2016-02-28 67 views
15

我在Angular2/TypeScript應用程序中沒有意識到http服務位置的角度服務 - 顯然需要什麼。Angular 2在post請求中動態改變基址url

出於測試目的,我需要運行帶有多個目標的TypeScript應用程序 - 它可以是本地主機(用於測試)或雲環境。我們的目標是將所有請求從一個地址切換到另一個地址,並在源代碼中進行單行更改。 可接受的解決方案不應該要求在所有角度服務中將目標位置添加爲常量值。

我找到了一個很好的例子,如何做到這一點Angular 2 - Dynamically find base url to use in the http requests (services)

隨着Angular2版本2.0.0-beta.6,你可以重寫合併方法

import {BaseRequestOptions, RequestOptions, RequestOptionsArgs} from 'angular2/http'; 

export class CustomRequestOptions extends BaseRequestOptions { 
    merge(options?:RequestOptionsArgs):RequestOptions { 
     options.url = 'http://192.123.24.2:8080' + options.url; 
     return super.merge(options); 
    } 
} 

您可以用這種方式註冊該類:

bootstrap(AppComponent, [HTTP_PROVIDERS, 
    provide(BaseRequestOptions, { useClass: CustomRequestOptions }) 
]); 

它適用於GET請求但對POST請求不起作用 - POST中的基本URL尚未被觸及(瀏覽器向JavaScript主機服務器發送請求,而不是發送到所需的http目標)。

如何在Angular 2中動態更改POST請求的基址地址?

+0

我有你無角的答案。這對你有用。你想讓我把它作爲答案嗎? – Aminadav

回答

5

嘗試這種方式

import {BaseRequestOptions, RequestOptions, RequestOptionsArgs} from 'angular2/http'; 

export class CustomRequestOptions extends BaseRequestOptions { 
    merge(options?:RequestOptionsArgs):RequestOptions { 
     options.url = 'http://192.123.24.2:8080' + options.url; 
     var result = super.merge(options); 
     result.merge = this.merge; 
     return result; 
    } 
} 

bootstrap(AppComponent, [HTTP_PROVIDERS, 
    // < RC.4 
    provide(RequestOptions, { useClass: CustomRequestOptions }), 
    // >= RC.4 
    { provide: RequestOptions, useClass: CustomRequestOptions } 
]); 
+0

謝謝。我沒有想到,** result.merge = this.merge; **是必要的,但它確實是 –

+0

Thanks.now它適用於POST請求 – kTn