2013-02-25 82 views
7

是否可以指定自定义$资源操作的路径?

我想写点东西像:

angular.module('MyServices', [ 'ngResource' ]).factory('User', [ '$resource', ($resource)-> 
    $resource('/users', {}, { 
    names: { path: '/names', method: 'GET', isArray: true } 
    }) 
]) 

所以我可以用它喜欢:

User.names() # GET /users/names 
+1

接受的答案已经过时了,它不仅是谈论合并的功能,但也有[更多直接的替代品(http://stackoverflow.com/a/20022017/1709587)。 – 2015-05-07 09:18:44

回答

8

它不是直接在AngularJS当前版本的支持,但有一个pull request开放所以有可能在不久的将来得到支持。

至此,你已经有了3个选项:

1)播放与路径变量:

$resource('/users/:names', {}, { 
    names: { params: {names: 'names'}, method: 'GET', isArray: true } 
    }) 

2)使用$http service代替

3)尝试从代码在猴子补丁版本的AngularJS上提到的PR

+3

现在有在角1.2'url'属性 - 参见:http://stackoverflow.com/a/20022017/2583484 – Adam 2013-11-16 18:53:41

5

查看此working Plunker(摘录)中的日志:

var app = angular.module('plunker', ['ngResource']) 
    .controller('MyController', 
    function($scope, $resource) { 
     var User = $resource(
     '/users/:action', 
     {}, 
     { 
      names:{ 
      method:'GET', 
      params:{action:'names'} 
      } 
     } 
    ); 

     $scope.users = User.get(); 
     $scope.names = User.names(); 
    } 
); 
+0

谢谢。这对我的项目非常有用。 – 2013-11-06 13:54:38

5

一个不太侃侃而谈,但同样有效的方法:

var resourceUrl = '/users'; 
return $resource(resourceUrl, {}, { 
    names: { path: resourceUrl + '/names', method: 'GET', isArray: true } 
}) 
5

从角文档:https://docs.angularjs.org/api/ngResource/service/ $资源 你可以为你的自定义操作,这将覆盖前一个指定“URL”。

angular.module('MyServices', ['ngResource']).factory('User', ['$resource', ($resource)-> $resource('/users', {}, { 
names: { url: '/users/names', method: 'GET', isArray: true } 
})]) 

它在我的项目中使用角1.3.10!

+0

这太棒了。谢谢! – whiterook6 2015-09-30 23:15:00