7

サービスに変換したい次の機能があります。

$resource 呼び出しを AngularJS サービスに抽出する方法と、このサービスを呼び出す方法を教えてください。

self.select = function (email) {
    var Player = $resource('/player/get',{email:email});
    var player = Player.get(function() {
        self.selectedPlayer.email = player.email;
        self.selectedPlayer.fuel = player.fuel;
        self.selectedPlayer.cargo = player.cargo;
        self.selectedPlayer.food = player.food;
    });
}

ありがとう!

4

2 に答える 2

18

バージョン 0.9.19 で作業していると思われます。まず、バージョン 1.0rc4 に移行することをお勧めします。バージョン 1.0 はまもなく稼働し、安定していますが、バージョン 0.9 から多くの重大な変更が加えられています。詳細については、 Angular のドキュメントを参照してください。

v1.0 では、コントローラー、サービス、ディレクティブなど、すべてをモジュールにラップします。次のようにモジュールを作成します。

var module = angular.module('ModuleName', ['ngResource']);

バージョン 1.0 では、リソース サービスは独自のクラスに分解されるため、依存関係として与える必要があります。また、アプリにリソース jsファイルを含める必要があります。

サービスを作成するには、モジュール API を使用するだけです。この場合:

module.factory('Player', ['$resource', function($resource) {
   return $resource('/player/get');}]);

ここで、$resource への依存関係が angular によって注入されることに注意してください。

個人的には、サービス内のスコープを台無しにしたくないので、コントローラー内に次のようにします。

module.controller('MyController', ['$scope', 'Player', function($scope, Player) {
    $scope.select = function(email) {
        console.log("selecting");
        Player.get({
        email: email
        }, function(player) {
            $scope.selectedPlayer = player;
        });
    };
}]);​

v1.0 では、スコープもコントローラーに挿入されるため、self を使用しないことに注意してください。また、selectedPlayer には player からのフィールドのみが含まれると勝手に仮定したので、selectedPlayer の上に直接 player を書きました。フィールドごとに手動で行うか、 を使用angular.extend($scope.selectedPlayer, player);して 2 つのオブジェクトをマージすることもできます。

ここにフィドルがあります:http://jsfiddle.net/DukvU/

于 2012-04-07T04:55:34.037 に答える
11
angular.module('myModule', []).
  factory('Player', function($resource) {
    return $resource('/player/get',{email:email});
  });

function MyController($scope, Player) {
   $scope.select = function(email) {
     Player.get(....);
   }
}
于 2012-04-07T04:43:22.990 に答える