2013-04-03 3 views
20

Tôi có mô-đun dịch vụ sau cho ứng dụng Góc.Angularjs - làm cách nào để đặt giá trị mô-đun trong dịch vụ?

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

Sau khi người dùng đăng nhập, dịch vụ login trả về một id phiên duy nhất và tôi muốn thiết lập giá trị của mô-đun uid cho các dịch vụ khác gọi để tham khảo.

Tôi chắc chắn rằng mã trên sẽ không hoạt động vì tôi không thể sử dụng giá trị làm phụ thuộc trong giai đoạn cấu hình của mô-đun. Làm cách nào tôi có thể đặt giá trị uid trong dịch vụ login và truy cập dịch vụ đó trong các dịch vụ khác trong mô-đun hoặc nếu tôi không thể đặt giá trị có thể được đặt/nhận bởi các dịch vụ này?

Trả lời

26

Các giá trị nguyên thủy không có nghĩa là giữ thông tin thay đổi trong quá trình đăng ký của bạn. Bạn cần có giá trị UID là đối tượng hoặc dịch vụ tiêu chuẩn. Là một đối tượng:

.value('uid', {}); 

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

Bạn cũng có thể muốn đặt tất cả nội dung liên quan đến người dùng vào một dịch vụ thay vì ba. Xem bài đăng SO khác này để biết thêm thông tin: https://stackoverflow.com/a/14206567/259038