【问题标题】:Multiple parameters in AngularJS $resource GETAngularJS $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'});

但这不起作用。

【问题讨论】:

    标签: javascript angularjs rest ngresource


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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-24
        • 2014-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多