2017-12-18 377 views
0

我很喜歡使用Ionic或Angular的noob。所以作爲備忘單,我使用了離子超啓動模板(下面的鏈接)。 我試圖做一個GET請求我的API和它的作品只是覺得如果我做這樣的:HttpClient追加參數對象GET請求

this.api.get('user/'+this.user.userId+'/entries?include=stuff&access_token=TOKEN'); 

,但是當我把網址參數到一個對象時,它停止工作:

let options = { 
    'include':'stuff', 
    'access_token':'TOKEN' 
} 
this.api.get('user/'+this.user.userId+'/entries', options); 

我得到的唯一錯誤是「未經授權的請求」,因爲包括訪問令牌的選項對象沒有附加到URL。


在離子超起動模板在我的params對象每個鍵的providers/api/api.ts電話.set()

if (params) { 
    reqOpts.params = new HttpParams(); 
    for (let k in params) { 
    reqOpts.params.set(k, params[k]); 
    } 
} 

但根據角大學,這是不可能的,因爲「的HttpParams是不可改變」。 如果真的做錯了,我不相信它會出現在離子模板中。我也不相信我會成爲第一個遇到這個問題的人。

但是,我卡在這裏,所以任何幫助,將不勝感激。



鏈接到角大學: https://blog.angular-university.io/angular-http/#httprequestparameters

鏈接到離子超首發: https://github.com/ionic-team/starters/tree/master/ionic-angular/official/super

+0

搜索參數應該是選項的*部分*,而不是整個選項。你可以添加params,不變性只意味着這樣做會返回一個新的對象,並設置舊的和額外的參數,而不是在原地進行變異。 – jonrsharpe

+0

不知道我在這裏弄錯了,但是:在src/providers/api/api.ts中定義的API類需要我的params對象,創建一個新的HttpParams實例並將每個參數附加到reqOpts.params。然後它將整個reqOpts對象傳遞給http.get(endpoint,reqOpts)。所以我的初始參數只是傳遞的請求的一部分,而不是整個的。沒有? – yardarrat

回答

0

我想我想通了自己:

如果我寫(在我的src/providers/api/api.ts

reqOpts.params = reqOpts.params.append(k, params[k]); 

代替

reqOpts.params.set(k, params[k]); 

它的工作原理。

,如果你使用的是環回API,因爲我你可能已經嵌套狀物體:

let options = { 
    "filter": { 
    "order": "date DESC" 
    }, 
    "access_token":this.user._accessToken 
}; 

這是不行的。嘗試改爲:

let options = { 
    "filter": '{"order":"date DESC"}', 
    "access_token":this.user._accessToken 
};