2017-10-20 78 views
0

我想在Angular4中調用包含URL參數的REST API。模板看起來像這樣:Angular4 http獲得URL參數

http://localhost:61448/api/Product/language/{languauge}/name/{name} 

這是一個工作示例:

http://localhost:61448/api/Product/language/en-us/name/apple 

我知道我可以只CONCAT的URL自己:

this.http.get<Array<ProductResponse>>('http://localhost:61448/api/Product/language/' + 'en-us' + '/name/' + 'apple',) 
     .subscribe(data => { 
     // do something with data 
    }); 

但我希望能找到一個使用類似HttpParams的更好的解決方案:

const params = new HttpParams() 
.set('language', 'en-us') 
.set('name', 'apple'); 

this.http.get<Array<ProductResponse>>('http://localhost:61448/api/Product', {params : params}).subscribe(data => { 
    // do something with data 
}); 

但是,這將產生以下的請求(包含查詢參數):

http://localhost:61448/api/Product?language=en-us&name=apple 

有什麼辦法來產生不CONCAT它自己正確的網址是什麼?

+0

看看這個答案... [https://stackoverflow.com/a/41533506 /5874913](https://stackoverflow.com/a/41533506/5874913) – seven

+1

@seven您的建議答案不能幫助我,他們正在使用查詢參數!請刪除重複的標誌。 –

+1

答案是否定的。只需使用模板字符串,使其更具可讀性。 –

回答

1

代替:

this.http.get<Array<ProductResponse>>('http://localhost:61448/api/Product/language/' + 'en-us' + '/name/' + 'apple',) 
     .subscribe(data => { 
     // do something with data 
    }); 

做:

this.http.get<Array<ProductResponse>>(`http://localhost:61448/api/Product/language/${languauge}/name/${name}`,) 
     .subscribe(data => { 
     // do something with data 
    }); 

其中languagename是您的PARAMS。

的URL

通知特別報價的性格和你的PARAMS必須是內${}

參考鏈接: https://basarat.gitbooks.io/typescript/docs/template-strings.html

+0

這不是我正在尋找的東西,但方式更好,然後我的aproach和足夠的我。謝謝! –

+0

好吧,根據我對你的問題的理解,你正在尋找的東西幾乎是不可能的,因爲typescript/angular無法知道在哪個url中puth哪個變量。你必須有錨。這就是這種方法的用途。 –