2012-04-06 2 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에서는 컨트롤러, 서비스, 지시문 등 모듈의 모든 것을 래핑합니다. 다음과 같은 모듈을 만드십시오 :

버전 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가 플레이어의 필드만을 포함하므로 selectedPlayer의 맨 위에 플레이어를 썼다고 가정합니다. 필드별로 수동으로 수행하거나 angular.extend($scope.selectedPlayer, player);을 사용하여 두 개체를 병합 할 수도 있습니다.

다음은 바이올린입니다. 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(....); 
    } 
}