Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从ng资源获取url?_Javascript_Angularjs - Fatal编程技术网

Javascript 如何从ng资源获取url?

Javascript 如何从ng资源获取url?,javascript,angularjs,Javascript,Angularjs,如何从ng资源获取url(和参数) 如果这是不可能的,我如何才能创建一个包装器或扩展ng资源,以便获得此功能 更新:我希望能够从资源对象中提取URL和参数,而无需发送请求 在理想的世界中,以下各项起作用: myResource = $resource('localhost/foo/bar'); myResource.getUrl() // returns localhost/foo/bar 由于getUrl函数不存在,我尝试了在 包装厂: angular.module('app').fact

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

如果这是不可能的,我如何才能创建一个包装器或扩展ng资源,以便获得此功能

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

在理想的世界中,以下各项起作用:

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

myResource.getUrl() // returns localhost/foo/bar
由于getUrl函数不存在,我尝试了在

包装厂:

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(…) 

感谢您的指导或解决方案

以下内容可能有用。由于您可以显式控制传递到$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;
      }
    }
  }
);

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

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

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

非常感谢。使用此解决方案,我必须调用get方法才能公开getUrl函数。这个问题可能还不够清楚。我想要实现的是一种从资源元素中提取URL和参数的方法,而不必触及端点。我也需要这种方法进行单元测试。我想做:
$httpBackend.expectGET(MyResource.getUrl()).response(200,fixture.get)