2013-04-03 22 views
20

Açısal uygulama için aşağıdaki hizmet modülüne sahibim. Angularjs - Bir hizmette modül değerlerini nasıl ayarlayabilirim?

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

Kullanıcı sisteme giriş sonra

, login hizmet benzersiz bir oturum kimliği döner ve diğer hizmetler için modülün uid değerini ayarlamak istediğiniz başvurmak için çağırır.

Yukarıdaki kodun çalışmadığından eminim çünkü modülün yapılandırma aşamasında bağımlılık olarak bir değer kullanamıyorum. uid değerini login hizmetinde nasıl ayarlayabilirim ve modül içindeki diğer hizmetlere erişebilir veya bu mümkün değilse, bu hizmetler tarafından ayarlanabilen/alınabilecek bir değeri nasıl yapabilirim?

cevap

26

İlkel olan değerler, uygulamanızın seyri sırasında değişen bilgileri tutmak için tasarlanmamıştır. UID değerinin nesnesi veya standart bir hizmet olması gerekir. Nesne:

.value('uid', {}); 

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

Ayrıca, kullanıcı ile ilgili tüm öğelerinizi üç yerine tek bir servise koymak isteyebilirsiniz. Daha fazla bilgi için bu diğer SO mesajına bakın: https://stackoverflow.com/a/14206567/259038

İlgili konular