在对网络服务进行RESTful调用时,我们应该如何处理Angular 2中的路径参数呢?
我已经找到了用于查询参数的URLSearchParams
对象,但从我找到的情况来看,我们似乎只能将就路径本身的字符串连接。喜欢
let url = 'api/v1/something/' + encodeURIComponent(someParameter) +
'/etc/' + encodeURIComponent(anotherParam) + '/and/so/on';
是否包含在angular2中,其功能类似于:
let url = new URL('api/v1/something/{id}/etc/{name}/and/so/on', param1, param2);
当然,我自己也可以创建类似的东西,但如果angular2中包含了一些东西,我会更喜欢。
发布于 2017-03-24 18:20:56
实际上,假设已经设置和编码了id
和name
,那么您可以使用string interpolation和几乎与您建议的完全相同的东西。
let url = new URL(`api/v1/something/${id}/etc/${name}/and/so/on`);
我要指出的是,目前the ES6 URL类只支持searchParams
,但没有路径参数的概念。
而且,我知道没有一种方法可以在不使用URLSearchParams
实现your own QueryEncoder
的情况下自动对参数进行编码
发布于 2017-05-12 12:24:04
如果有人感兴趣,这就是我最终要做的:
export interface PathParameters {
[parameterName: string]: string;
}
export class Url {
public static create(url: string, parameters: PathParameters) {
const placeholders = url.match(/({[a-zA-Z]*})/g);
placeholders.forEach((placeholder: string) => {
const key = placeholder.substr(1, placeholder.length - 2);
const value = parameters[key];
if (!value) {
throw new Error(`parameter ${key} was not provided`);
}
url = url.replace(placeholder, encodeURIComponent(value));
});
return url;
}
}
使用方法:
const url = Url.create('/api/cars/{carId}/parts/{partId}', {
carId: carId,
partId: partId
});
https://stackoverflow.com/questions/40911065
复制相似问题