2015-03-14 3 views
2

Привет Я создал фабрику, чтобы получить текущее количество пользователей в Интернете из моей базы данных Firebase.AngularJS привязка только после изменения

Когда я впервые загружаю страницу, она отлично работает и отображает всех текущих пользователей, но если я перейду на другую страницу и вернусь, она будет отображаться как 0 до тех пор, пока новый пользователь не подключится или не отключится или не обновится.

Я после этого руководства: http://www.ng-newsletter.com/advent2013/#!/day/9

App.js

angular.module('myApp', ['ngRoute', 'firebase', 'ui.bootstrap']) 
.factory('PresenceService', ['$rootScope', 
    function($rootScope) { 
    var onlineUsers = 0; 

    // Create our references 
    var listRef = new Firebase('https://my-db.firebaseio.com/presence/'); 

    // This creates a unique reference for each user 
    var onlineUserRef = listRef.push(); 
    var presenceRef = new Firebase('https://my-db.firebaseio.com/.info/connected'); 

    // Add ourselves to presence list when online. 
    presenceRef.on('value', function(snap) { 
     if (snap.val()) { 
     onlineUserRef.set(true); 
     // Remove ourselves when we disconnect. 
     onlineUserRef.onDisconnect().remove(); 
     } 
    }); 

    // Get the user count and notify the application 
    listRef.on('value', function(snap) { 
     onlineUsers = snap.numChildren(); 
     $rootScope.$broadcast('onOnlineUser'); 
    }); 

    var getOnlineUserCount = function() { 
     return onlineUsers; 
    } 

    return { 
     getOnlineUserCount: getOnlineUserCount 
    } 
    } 
]); 

mainController.js

angular.module('myApp') 
.controller('mainController', function($scope, authService, PresenceService, $http, $routeParams, $firebaseObject, $firebaseAuth, $location) { 

    $scope.totalViewers = 0; 

    $scope.$on('onOnlineUser', function() { 
    $scope.$apply(function() { 
     $scope.totalViewers = PresenceService.getOnlineUserCount(); 
    }); 
    }); 

    // login section and auth 
    var ref = new Firebase("https://my-db.firebaseio.com"); 
    $scope.authObj = $firebaseAuth(ref); 
    var authData = $scope.authObj.$getAuth(); 
    if (authData) { 
    console.log("Logged in as:", authData.uid); 
    $location.path("/user/"+authData.uid); 
    } else { 
    console.log("Logged out"); 
    $location.path("/"); 
    } 

    // user ref 
    var userRef = new Firebase("https://my-db.firebaseio.com/users/"+ authData.uid); 
    var syncObject = $firebaseObject(userRef); 
    syncObject.$bindTo($scope, "data"); 

}); 

main.html

{{totalViewers}} 

ответ

0

Внутри вашего контроллера измените первую строку, как показано ниже.

//$scope.totalViewers = 0; 
$scope.totalViewers = PresenceService.getOnlineUserCount(); 

Поскольку каждый раз, когда вы покидаете страницу, ее контроллер очищается и в следующий раз получает значение «ноль». Итак, правильно, вы должны прочитать $ scope.totalViewers из вашей службы.