4

たとえば、次のような安らかな API があります。

  • /players- すべてのプレイヤーのリストを取得する
  • /players{/playerName}- 特定のプレイヤーの情報を取得する

そして、私はすでに次のような ng-resource を使用する関数を持っています:

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

この関数を次のような特定のプレーヤーに再利用できますか?

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

だから私はしたい...

  • /playersパラメータを渡さなかった場合のリクエストを送信しnameます。
  • パラメータ/players/someoneを渡した場合のリクエストを送信namesomeone

それ以外の場合は、特定のプレイ用に別の関数を作成する必要がありますか?

4

3 に答える 3

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 秒かかることです。次に、このように任意のリソースをコントローラーに注入できます。

.controller('homeCtrl', function($scope, Foo, Bar) {
  $scope.foo = Foo.query();
  $scope.bar = Bar.get({id:4});
}
于 2013-09-18T14:19:36.523 に答える
-2
  • Play.query() を使用してすべてのプレイヤーを検索します
  • Play.get({name:$scope.name}) を使用して 1 人のプレーヤーを見つけます
于 2013-09-18T14:09:40.770 に答える