2015-11-16 3 views
2

Я использую Angular, и мне нужно сделать несколько неаккуратных вызовов 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.

+0

Можете ли вы быть более конкретным о том, что вы хотите сделать? Вы можете называть определенно $ http стенографические методы, такие как $ http.get(), $ http.post(), $ http.put и т. Д., Который возвращает обещание, которое позволяет привязать его к методу then(). Эти URL-адреса выглядят хорошо для меня, это просто означает, что с этими дополнительными параметрами требуется немного больше обработки. Вероятно, вы можете связать их с $ routeParams, чтобы получить эти жетоны. – TheLazyChap

+0

Проблема в том, что $ http не заменяет маркеры параметров значениями, я редактировал свой первый пост. – Astaroth

+0

Итак, не можете ли вы использовать $ routeParams.param1 и $ routeParams.param2 и поместить его в $ http.get ("/ slug /" + $ routeParams.param1 + "/ slug /" + $ routeParams.param2). Then (cb) .catch (ERR); возможно, я что-то не понял. – TheLazyChap

ответ

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}синтаксического анализ метод будет возвращать /user/34/games/55/

Это лучшее решение, которое я мог думать, так как я не смог найти родной Угловой способ сделать это.