我很喜欢使用Ionic或Angular的菜鸟。因此,作为一个备忘单,我正在使用离子超级启动器模板(链接如下)。我正在尝试向我的API发出get请求,它只是找到我是这样做的:
this.api.get('user/'+this.user.userId+'/entries?include=stuff&access_token=TOKEN');
但是当我将url params放入一个对象时它停止工作:
let options = {
'include':'stuff',
'access_token':'TOKEN'
}
this.api.get('user/'+this.user.userId+'/entries', options);
我得到的唯一错误是“未授权请求”,因为包含访问令牌的选项对象未附加到URL。
在离子超级启动器模板中,providers/api/api.ts
为我的params对象中的每个键调用.set()
:
if (params) {
reqOpts.params = new HttpParams();
for (let k in params) {
reqOpts.params.set(k, params[k]);
}
}
但根据Angular大学的说法,这是不可能的,因为“HTTPParams是不可变的”。如果这样做确实是错误的,我不相信它会出现在离子模板中。我也不相信我是第一个遇到这个问题的人。
但是,我被困在这里所以任何帮助将不胜感激。
链接到Angular大学:https://blog.angular-university.io/angular-http/#httprequestparameters
链接到离子超级起动器:https://github.com/ionic-team/starters/tree/master/ionic-angular/official/super
我想我自己弄清楚了:
如果我写(在我的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
};