4

有RESTful API,例如:

  • /players- 获取所有玩家的列表
  • /players{/playerName}- 获取特定玩家的信息

我已经有一个使用 ng-resource 的函数,例如:

function Play() {
  return $resource('/players');
}

我可以为特定播放器重用此功能,例如:

function Play(name) {
  return $resource('/players/:name', {
    name: name
  });
}

所以我想...

  • /players如果我没有传递name参数,请发送请求。
  • /players/someone如果我通过name参数发送请求someone

否则,我必须为特定的播放编写另一个函数?

4

3 回答 3

12

使用 ngResource 非常非常简单(它基本上是一个两行)。您甚至不需要在这里创建任何自定义操作*。

我在这里发布了一个工作 Plunkr (只需打开 Chrome 开发人员工具并转到网络选项卡查看结果)。

服务机构:

return $resource('/users/:id/:name', { id:'@id', name: '@name' })

控制器:

  function( $scope, Users ){
    Users.query(); // GET /users (expects an array)
    Users.get({id:2}); // GET /users/2
    Users.get({name:'Joe'}); // GET /users/Joe
  }
于 2013-09-18T15:01:26.773 回答
4

我就是这样做的。这样,您不必为每个端点编写自定义资源函数,只需将其添加到列表资源列表中即可。我定义了一个我想像这样使用的端点列表。

var constants = {
  "serverAddress": "foobar.com/",
  "resources": {
      "Foo": {
        "endpoint": "foo"
      },
      "Bar": {
        "endpoint": "bar"
      }
  }
}

然后像这样从每个人中创建资源。

var service = angular.module('app.services', ['ngResource']);

var resourceObjects = constants.resources;

for (var resourceName in resourceObjects) {
  if (resourceObjects.hasOwnProperty(resourceName)) {
    addResourceFactoryToService(service, resourceName,    resourceObjects[resourceName].endpoint);
  }
}

function addResourceFactoryToService (service, resourceName, resourceEndpoint) {
  service.factory(resourceName, function($resource) {
    return $resource(
        constants.serverAddress + resourceEndpoint + '/:id',
            {
                id: '@id',
            },
            {
            update: {
                method: 'PUT',
                params: {id: '@id'}
            },
        }
    );
});

}

这样做的好处是添加一个新端点需要 2 秒,我什至为您提供了一个 put 方法。然后你可以像这样将你的任何资源注入到你的控制器中。

.controller('homeCtrl', function($scope, Foo, Bar) {
  $scope.foo = Foo.query();
  $scope.bar = Bar.get({id:4});
}
于 2013-09-18T14:19:36.523 回答
-2
  • Use Play.query() to find all players
  • Use Play.get({name:$scope.name}) to find one player
于 2013-09-18T14:09:40.770 回答