2012-04-06 14 views
7

Ho la seguente funzione che vorrei convertire in un servizio.Convertire una funzione AngularJS per il servizio

Come dovrei passare all'estrazione della chiamata $ in un servizio AngularJS e come chiamerei questo servizio?

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

Grazie!

risposta

18

Sospetto che stiate lavorando fuori dalla versione 0.9.19. Prima ti suggerisco di passare alla versione 1.0rc4. La versione 1.0 è prossima alla pubblicazione ed è stabile ma presenta molte modifiche alla versione 0.9. Puoi vedere lo Angular documentation per ulteriori informazioni.

Nella v1.0 si avvolge tutto in un modulo: controller, servizi, direttive e così via. Creare un modulo in questo modo:

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

Nella versione 1.0 del servizio risorsa è scomposto fuori nella propria classe, quindi bisogna dare come una dipendenza. Dovrai anche includere il file resource js nella tua app.

Ora per creare un servizio è sufficiente utilizzare l'API del modulo. In questo caso:

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

Si noti qui che la dipendenza da $ risorsa viene iniettata da angolare.

Personalmente non mi piace pasticciare con la portata dentro il mio servizio in modo avrei la seguente dentro il mio controller:

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

Si noti che nella versione 1.0 il campo di applicazione è anche iniettato il controller in modo non usare più se stessi. Inoltre ho preso la libertà di presumere che il SelectedPlayer avrebbe contenuto solo i campi del giocatore, quindi ho appena scritto il giocatore direttamente sopra a selectedPlayer. Puoi anche farlo manualmente field by field o usare angular.extend($scope.selectedPlayer, player); per unire i due oggetti.

Ecco un violino: 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(....); 
    } 
} 
Problemi correlati