如何在 $http 中使用类似 ngResource 的查询 url
How to use ngResource-like query urls with $http
我正在使用 Angular,我必须进行一些非 restful ajax 调用。而且,因此我不能使用 ngResource
。我的 URL 类似于 /admin/:someId
或 /admin/:someId/users/:someUserId
.
ngResource 方法只是解析那些标记,但是,有什么方法可以将这些 URL 与 $http
对象一起使用吗?
我通过以下方式将我的后端路由公开给 javascript:/slug/:param1/slug/:param2
。
使用 ngResource
方法,我必须执行以下操作才能使其正常工作:Resource.query({param1: someValue, param2: anotherValue});
。
问题是在这种情况下我不能使用 ngResource
并且我无法使用 $http.get
方法让它工作,它不会替换标记 :param1
和 :param2
对于价值观。它只是调用 /slug/:param1/slug/:param2
.
以防万一有人找到这个帖子,我结束了这个:
.factory('RouteUtils', function () {
return {
/**
* Replaces all token appearances with their corresponding value.
*
* @param string route The route that has the tokens you want to replace. Tokens must be like ":someString".
* @param object params Object of parameters. It must be key value. For example: {firstKey: 34, secondKey: 'I'm some string'}.
*
* @returns string Token replaced route.
*/
parse: function (route, params) {
var propNames = Object.getOwnPropertyNames(params);
propNames.forEach(function (propName) {
route = route.replace(':' + propName, encodeURI(params[propName]))
});
return route;
}
};
})
然后在 $http
调用:
.factory('SomeFactory', function ($http, RouteUtils) {
return {
someGetCall: function (params) {
return $http.get(RouteUtils.parse(routeGet, params));
},
somePostCall: function (params) {
return $http.post(RouteUtils.parse(routePost, params), {
postParam1: 'postValue1',
postParam2: 'postValue2'
});
},
};
})
作为变量 route 类似于 /user/:userId/games/:gameId/
和 params 类似于 {userId: 34, gameId: 55}
parse 方法会 return /user/34/games/55/
这是我能想到的最佳解决方案,因为我无法找到本机 Angular 方法来做到这一点。
我正在使用 Angular,我必须进行一些非 restful ajax 调用。而且,因此我不能使用 ngResource
。我的 URL 类似于 /admin/:someId
或 /admin/:someId/users/:someUserId
.
ngResource 方法只是解析那些标记,但是,有什么方法可以将这些 URL 与 $http
对象一起使用吗?
我通过以下方式将我的后端路由公开给 javascript:/slug/:param1/slug/:param2
。
使用 ngResource
方法,我必须执行以下操作才能使其正常工作:Resource.query({param1: someValue, param2: anotherValue});
。
问题是在这种情况下我不能使用 ngResource
并且我无法使用 $http.get
方法让它工作,它不会替换标记 :param1
和 :param2
对于价值观。它只是调用 /slug/:param1/slug/:param2
.
以防万一有人找到这个帖子,我结束了这个:
.factory('RouteUtils', function () {
return {
/**
* Replaces all token appearances with their corresponding value.
*
* @param string route The route that has the tokens you want to replace. Tokens must be like ":someString".
* @param object params Object of parameters. It must be key value. For example: {firstKey: 34, secondKey: 'I'm some string'}.
*
* @returns string Token replaced route.
*/
parse: function (route, params) {
var propNames = Object.getOwnPropertyNames(params);
propNames.forEach(function (propName) {
route = route.replace(':' + propName, encodeURI(params[propName]))
});
return route;
}
};
})
然后在 $http
调用:
.factory('SomeFactory', function ($http, RouteUtils) {
return {
someGetCall: function (params) {
return $http.get(RouteUtils.parse(routeGet, params));
},
somePostCall: function (params) {
return $http.post(RouteUtils.parse(routePost, params), {
postParam1: 'postValue1',
postParam2: 'postValue2'
});
},
};
})
作为变量 route 类似于 /user/:userId/games/:gameId/
和 params 类似于 {userId: 34, gameId: 55}
parse 方法会 return /user/34/games/55/
这是我能想到的最佳解决方案,因为我无法找到本机 Angular 方法来做到这一点。