2013-06-02 35 views
36

Tôi đang cố gắng liên kết với rootscope để tôi có thể đặt sự hiện diện trên một máy chủ khác khi người dùng đăng nhập. Đây là mô-đun của tôi.angularjs Xem các thay đổi về rootscope

angular.module('presence', 
    [ 
    ] 
) 

.run(function ($rootScope) { 
    $rootScope.$watch($rootScope.currentUser, function() { 
    console.log('change currentUser') 
    console.log($rootScope.currentUser) 
    presence.setGlobal({ 
     u: $rootScope.currentUser, 
     s: 'on' 
    }) 
    }) 
}) 

Không có bộ điều khiển vì nó chỉ là sự hiện diện toàn cầu của người dùng và không liên quan gì đến DOM.

Tính năng này không hoạt động, đồng hồ chạy một lần nhưng không bao giờ trở lại các thay đổi tiếp theo. Cảm ơn bạn đã giúp đỡ.

Chỉnh sửa: Mã Login trông như thế này:

$scope.login = function() { 
    $http.post('http://localhost:3000/login', $scope.user).success(function(res, status) { 
     if (res && res._id) { 
     $rootScope.currentUser = res 
     } 
    }).error(function(res, status) { 
     $scope.error = res.err 
    }); 
    }; 

Mã này cập nhật tốt trong DOM. Nó cho thấy tên người dùng trong html ví dụ:

a.user(ui-if="currentUser", ng-href="/user/{{currentUser._id}}") {{currentUser.username}} 
+0

RootScope chỉ là phạm vi gốc ví dụ này của ứng dụng mà bạn sẽ muốn sử dụng một dịch vụ/nhà máy thay vào đó và bằng cách nào đó vẫn tồn tại sự thay đổi sự hiện diện ở đâu đó. –

+0

@xmltechgeek bạn có thể đưa ra ví dụ về cách thực hiện đúng không? Điều đó nghe có vẻ giống như những gì tôi cần tìm hiểu cảm ơn – Harry

+0

thử đặt '$ rootScope.currentUser' thành giá trị giả trên lỗi cũng như để kiểm tra xem đó có phải là nguyên nhân hay không. – basarat

Trả lời

63

Cú pháp là $rootScope.$watch('currentUser') không $rootScope.$watch($rootScope.currentUser)

+1

Xin chào, bạn viết câu này ở đâu? –

+0

Bất cứ nơi nào bạn có một $ rootScope tiêm. –

1

Something cần phải thay đổi $rootScope.currentUser cho bạn để có thể nhận thấy bất kỳ thay đổi trong đó. Bạn đã chia sẻ mã cho điều đó.

Cũng thay đổi thành $rootScope.currentUser cần phải diễn ra bên trong vòng lặp angularJS (http://docs.angularjs.org/guide/concepts). Nếu nó được thực hiện bên ngoài bạn có thể gọi $ tiêu hóa (http://docs.angularjs.org/api/ng. $ RootScope.Scope # $ digest)

+0

Tôi đã cập nhật câu hỏi của tôi cảm ơn sự giúp đỡ của bạn – Harry

Các vấn đề liên quan