我在 Typescript 中没有过多地使用不可变对象,但新的 Angular 更新让我陷入了困境。我尝试使用新的 Http 库更新我自己的 Http 服务。现在我无法将 url 参数动态添加到 Http GET 请求中。
这个问题在这里解释: https ://medium.com/spektrakel-blog/angular-httpclient-enforces-immutability-dad161d8714b
我有一个简单的函数,它应该通过传递通用对象或同时具有“键”和“值”属性的对象来处理动态添加的不同方式。它看起来像这样:
public setParams(reqOptions) {
let params;
if (reqOptions) {
if (reqOptions.key && reqOptions.value) {
params = new URLSearchParams;
params.append(reqOptions.key, reqOptions.value);
} else {
params = new URLSearchParams;
for (let item in reqOptions) {
if (reqOptions.hasOwnProperty(item)) {
params.append(item, reqOptions[item]);
}
}
}
}
return params;
}
有没有办法用不可变的东西重新创建这个功能?
所以如果我有一个对象,比如
{
status: 'new',
per_page: 50,
page: 0
}
我这样调用上面的函数
listShipments(reqOptions?): Observable<any> {
let params = this.setParams(reqOptions);
return this.http.get(this.baseUrl + '/shipments', {params: params})
.map(this.extractData);
}
它会将请求 url 重写为
shipments?status=new&per_page=50&page=0
我发现这非常有用,因为我可以轻松地将一组动态参数与调用一起传递。我怎么能用不可变的东西重新创建它?
(顺便说一句:对于“非破坏性”而言,切换到不可变对象在这种情况下似乎并不容易更新)