【问题标题】:How can I get the url from an ng-resource?如何从 ng-resource 获取 url?
【发布时间】:2016-04-28 17:23:15
【问题描述】:

如何从 ng 资源中获取 url(和参数)?

如果这不可能,我该如何创建包装器或扩展 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(…) 

感谢指导或解决方案!

【问题讨论】:

  • 我也需要它来进行单元测试。我想做:$httpBackend.expectGET(MyResource.getUrl()).respond(200, fixture.get)

标签: javascript angularjs


【解决方案1】:

也许以下内容会有用。由于您可以明确控制传递给 $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;
      }
    }
  }
);

【讨论】:

  • 谢谢!使用此解决方案,我必须调用 get 方法才能公开 getUrl 函数。这个问题可能还不够清楚。我想要实现的是一种从资源元素中提取 url 和 params 的方法,而无需到达端点。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 2013-09-23
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多