如何从ng-resource获取url?

时间:2016-04-28 17:23:15

标签: javascript angularjs

如何从ng-resource获取url(和params)?

如果不可能,我怎样才能创建包装器或扩展ng-resource以便我获得此功能?

更新:我希望能够从资源对象中提取URL和参数,而无需发送请求。

在理想的世界中,以下是有效的:

myResource = $resource('localhost/foo/bar');

myResource.getUrl() // returns localhost/foo/bar

由于getUrl函数不存在,我尝试了https://stackoverflow.com/a/28474289/4829972中找到的以下内容

包装厂:

angular.module('app').factory('ExtendedResourceFactory',['$resource',
  function($resource) {
    function ExtendedResourceFactory() {
      var Resource = $resource.apply(this, arguments);

      Resource.prototype.getArguments = function() {
        return arguments
      };

      return Resource;
    }

    return ExtendedResourceFactory;
  }
]); 

我注入新工厂并试用:

res = ExtendedResourceFactory('url')
res.getArguments()

Uncaught TypeError: res.getArguments is not a function(…) 

感谢指示或解决方案!!

2 个答案:

答案 0 :(得分:0)

以下可能会有用。由于您明确控制了传递给$ resource的URL,我假设您可以转换响应以提供您想要的功能。它绝不是干净的,但确实看起来很实用。

var resource;

resource = $resource('/foo/bar', 
  {
    id: 1
  }, {
    get: {
      method: 'GET',
      transformResponse: function(data) {
        data = angular.fromJson(data);
        data.getUrl = function() {
          return '/foo/bar';
        };
        return data;
      }
    }
  }
);

答案 1 :(得分:0)

看起来NgResource将所有内部变量和URL存储在自己的范围内,从而无法从外部访问它们。

您可以做的是使用您提供的其他信息扩展您的$resource。使用此方法,您可以在您的资源旁边放置您的URL(或任何属性)。

myResource = angular.extend(
    $resource('localhost/foo/bar'),
    { 
        getUrl: function() { return 'localhost/foo/bar'; }
    }
);
myResource.getUrl() // returns localhost/foo/bar