如何使用$ http的ngResource类查询URL

时间:2015-11-16 14:17:14

标签: angularjs angular-http

我正在使用Angular而且我必须做一些不安静的ajax调用。而且,正因为如此,我无法使用ngResource。我的网址类似于/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

1 个答案:

答案 0 :(得分:1)

万一有人找到这个帖子,我结束了这样做:

.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'
            });
        },
    };
})

作为变量路径类似/user/:userId/games/:gameId/ params 之类的内容,例如{userId: 34, gameId: 55} 解析方法将返回{ {1}}

这是我能想到的最佳解决方案,因为我无法找到原生的Angular方式来实现它。