2012-04-06 16 views
7

Tengo la siguiente función que me gustaría convertir a un servicio.Convierta una función AngularJS al servicio

¿Cómo podría ir extrayendo la llamada $ resource a un servicio AngularJS y cómo llamaría a este servicio?

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; 
    }); 
} 

Gracias!

Respuesta

18

Sospecho que estás trabajando en la versión 0.9.19. Primero le sugiero que pase a la versión 1.0rc4. La versión 1.0 está próxima a entrar en funcionamiento y es estable, pero tiene muchos cambios de última hora en la versión 0.9. Puede ver el Angular documentation para obtener más información.

En la versión v1.0, envuelve todo en un módulo: controladores, servicios, directivas, etc. Crear un módulo de este modo:

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

En la versión 1.0 del servicio de recursos es un factor fuera en su propia clase, así que hay que darle como dependencia. También deberá incluir el archivo resource js en su aplicación.

Ahora, para crear un servicio, simplemente puede usar la API del módulo. En este caso:

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

Observe aquí que la dependencia de $ resource es inyectada por angular.

Personalmente no me gustaría meterse con el alcance dentro de mi servicio, así que tendría la siguiente dentro de mi controlador:

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

en cuenta que en el ámbito v1.0 también se inyecta en el controlador de modo no usar uno mismo más. También me tomé la libertad de suponer que el jugador seleccionado solo contendría los campos del jugador, así que simplemente escribí el jugador directamente sobre el jugador seleccionado. También puede hacerlo campo por campo manualmente o usar angular.extend($scope.selectedPlayer, player); para unir los dos objetos.

Aquí hay un violín: 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(....); 
    } 
} 
Cuestiones relacionadas