2017-12-18 385 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 
};