具有不同资源URL的相同数据类型(AngularJS)

时间:2014-02-13 20:17:51

标签: angularjs rest

我正在寻找一种正确的方法来处理可以通过不同资源网址获取的数据类型。请参阅下面的代码示例:

storeServices.factory('Booklist', ['$resource',
    function($resource){
        return $resource('http://some.domain.com/api/stores/:storeId/booklists/',
            {}, {
            query: {method:'GET', params:{storeId:'@storeId'}, isArray:true}
        });
    },
]);

但另外还有另一个API,用于获取书籍列表而无需指定storeId。例如:

http://some.domain.com/api/booklists/

我应该创建一个名称不同的工厂,还是有更好/更正确的方法?在此先感谢任何回复。

1 个答案:

答案 0 :(得分:0)

绝对可以使用相同的$ resource调用这两个不同的端点,但是这两个资源/端点是否属于同一类型是有疑问的(为了使用相同的$ resource工厂消耗)。

要完成此,您需要参数化您的嵌套资源,以便可以在运行时动态构建完整的网址:

PLUNKER

app.controller('MainController', function($scope, Booklist) {

  // Sends request to http://some.domain.com/api/stores/1/booklists/
  $scope.withStoreId = Booklist.query({storeId: 1, level1: 'stores'});

  // Sends request to http://some.domain.com/api/booklists/
  $scope.withStoreId = Booklist.query();

});

app.factory('Booklist', ['$resource',
  function($resource){
    return $resource('http://some.domain.com/api/:level1/:storeId/booklists/',
      {}, {
      query: {
        method:'GET', 
        params: {
          storeId: '@storeId'
        }, 
        isArray: true
      }
    });
  }
]);