2012-04-06 5 views
7

サービスに変換する以下の機能があります。AngularJS関数をサービスに変換する

$リソースコールを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; 
    }); 
} 

ありがとうございます!

答えて

18

バージョン0.9.19を使用していると思われます。最初にバージョン1.0rc4に移行することをお勧めします。バージョン1.0はライブに近づき、安定していますが、バージョン0.9よりも多くの変更点があります。詳細はAngular documentationをご覧ください。

v1.0では、モジュール内のすべてをコントローラ、サービス、ディレクティブなどで囲みます。次のようなモジュールを作成してください:

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

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

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

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

ここで、$ resourceへの依存性は角度によって注入されることに注意してください。

個人的に私は、私は私のコントローラ内部で、次のを持っているでしょう、私のサービス内の範囲を台無しに好きではない:v1.0のスコープもそうコントローラに注入されていることを

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

お知らせもう自己を使用しない。また、selectedPlayerがplayerからのフィールドだけを含んでいると仮定して自由を取ったので、playerをselectedPlayerの上にまっすぐ書いています。フィールドごとに手動で行うことも、angular.extend($scope.selectedPlayer, player);を使用して2つのオブジェクトをマージすることもできます。

ここはフィドルです:http://jsfiddle.net/DukvU/

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

function MyController($scope, Player) { 
    $scope.select = function(email) { 
    Player.get(....); 
    } 
} 
関連する問題