AngularJS $resource GET中的多个参数

Multiple parameters in AngularJS $resource GET

本文关键字:参数 resource GET AngularJS      更新时间:2023-09-26
'use strict';
angular.module('rmaServices', ['ngResource'])
    .factory('rmaService', ['$resource',
        function ($resource) {
            return $resource(
                   '/RMAServerMav/webresources/com.pako.entity.rma/:id',
                    {},
                   {
                      delete: { method: 'DELETE', params: {id: '@rmaId'}}, 
                      update: { method: 'PUT', params: {id: '@rmaId'}},
                      //RMAServerMav/webresources/com.pako.entity.rma/0/3
                      findRange:{method: 'GET', params:{id:'@rmaId'/'@rmaId'}}
                    });
        }]);
RMAServerMav/webresources/com.pako.entity.rma/0/3

这是使用finrange REST服务的正确方法。这个从1到4返回rmaID,但是我如何从控制器中使用它,服务中的正确语法是什么?

在控制器中,我想这样使用它:

$scope.rmas = rmaService.findRange({id:'0'/'3'});

你可以重写url,读取$resource docs

url - {string} -操作特定的url重写。支持url模板,就像支持资源级url一样。

资源声明

findRange:{ 
    url: '/RMAServerMav/webresources/com.pako.entity.rma/:id/:to', 
    method: 'GET', 
    params:{ 
        id:'@id', 
        to: '@to'
    }
}
在控制器

$scope.rmas = rmaService.findRange({id:0, to: 3});

我更喜欢用更短的方式定义参数。下面是一个完整的例子。

我们这里有两个参数:纬度和经度,它们只在URL中定义。方法get已经被ngResource

定义了
angular.module('myApp', ['ngResource'])
  .controller('myCtrl', function (ReverseGeocoderResource) {
    ReverseGeocoderResource.get({longitude: 30.34, latitude: 59.97}).$promise.then(function (data) {
      console.log(data.address.road + ' ' + data.address.house_number);
    })
  })
  .factory('ReverseGeocoderResource', function ($resource) {
    return $resource('https://nominatim.openstreetmap.org/reverse?format=json&lat=:latitude&lon=:longitude&zoom=18&addressdetails=1&accept-language=ru');
  });

试着在控制器中使用它来改变你的服务,像这样:

'use strict';
angular.module('rmaServices', ['ngResource'])
    .factory('rmaService', ['$resource',
        function ($resource) {
          var service ={}
          service.rma = function(){ // name it whatever you want
                return $resource(
                   '/RMAServerMav/webresources/com.pako.entity.rma/:id',
                    {},
                   {
                      delete: { method: 'DELETE', params: {id: '@rmaId'}}, 
                      update: { method: 'PUT', params: {id: '@rmaId'}},
                      //RMAServerMav/webresources/com.pako.entity.rma/0/3
                      findRange:{method: 'GET', params:{id:'@rmaId'/'@rmaId'}}
                    });
          };
          return service;
}]);

//in controller
rmaService.rma()
  .then(function(resource){
    $scope.rmas = resource.$findRange({id:'0'/'3'});
  });

我不知道这是否会起作用,因为我没有使用ngResource,但这就是我如何编码我的工厂服务。