2013-04-03 4 views
20

Mam następujący moduł usług dla aplikacji Angular.Angularjs - jak ustawić wartości modułów w usłudze?

angular.module('rs.services', []) 
    .value('uid', null) 

    .factory('login', ['$http', 'uid', function($http, uid) { 
    return function(user, pass) { 
     var p = $http.post('/login', {"user": user, "pass": pass}) 
     .success(function(data, status, headers, config) { 
      // set uid 
     }) 
     .error(function(data, status, headers, config) { 
      // do something 
     }); 

     return p; 
    } 
    }]); 

    // a service that uses uid to authenticate the request 
    .factory('userPrefs' ['$http', 'uid', function($http, uid) { 
    return function() { 
     return $http.post('/user/prefs', {"uid": uid}); 
    } 
    }]); 

Gdy użytkownik loguje się, usługa login zwraca unikalny identyfikator sesji i chcę ustaw modułu uid wartość dla innych usług wymaga, aby odnieść się do.

Jestem prawie pewien, że powyższy kod nie zadziała, ponieważ nie mogę użyć wartości jako zależności w fazie konfiguracji modułu. Jak ustawić wartość uid w usłudze login i uzyskać do niej dostęp w innych usługach w module lub, jeśli nie jest to możliwe, jak utworzyć wartość, którą można ustawić/uzyskać za te usługi?

Odpowiedz

26

Wartości, które są prymitywami, nie są przeznaczone do przechowywania informacji, które zmieniają się w trakcie aplikacji. Musisz mieć wartość UID jako obiekt lub standardową usługę. Jako obiekt:

.value('uid', {}); 

.factory('userPrefs' ['$http', 'uid', function($http, uid) { 
    // ... 
    uid.id = response.data.uid; 
    // ... 
}); 

Możesz również umieścić wszystkie swoje rzeczy związane z użytkownikiem w jednej usłudze zamiast trzech. Więcej informacji można znaleźć w tym poście SO: https://stackoverflow.com/a/14206567/259038