2013-02-25 72 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