AngularJS $resource GET 中的多个参数

Posted

技术标签:

【中文标题】AngularJS $resource GET 中的多个参数【英文标题】:Multiple parameters in AngularJS $resource GET 【发布时间】:2015-08-16 18:05:42 【问题描述】:
'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

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

在控制器中我想使用类似的东西:

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

但这不起作用。

【问题讨论】:

【参考方案1】:

您可以覆盖网址,阅读$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);

【讨论】:

谢谢,就是这样。我真的不喜欢关于 AngularJS 的 Google 文档。示例太简单了,文档……不适合我,或者它们太混杂了。基本上我试过这个,但我没有改变网址。如果你必须从两个表(连接等)中获取呢?有可能吗?【参考方案2】:

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

我们这里有 2 个参数:latitude 和 :longitude,它们只在 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');
  );

【讨论】:

【参考方案3】:

尝试在控制器中使用它来更改您的服务,如下所示:

'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,但这就是我编写工厂服务的方式。

【讨论】:

以上是关于AngularJS $resource GET 中的多个参数的主要内容,如果未能解决你的问题,请参考以下文章

AngularJs的resource服务与Rest服务交互

了解 angularJS $resource isArray 属性

如何使用 AngularJS 的 $resource 和 spring rest 控制器获取布尔值

如何将标头动态传递给 angularjs 的 $resource

angularjs $resource 类级回调,或后处理

AngularJS + Nginx CORS