2013-09-07 2 views
5

Я использую Firebase (AngularFire) с их API-интерфейсом PHP, и я создаю систему онлайн-присутствия. https://www.firebase.com/docs/managing-presence.htmlХранение нескольких ссылок на Firebase

Я начинаю с большим количеством ссылок, и это кажется неправильным.

Должны ли храниться огневые базы в ванильных варах или объекте?

controllers.controller('SocialCtrl', function($scope, angularFire) { 
    var onlineRef = new Firebase($scope.main.firebaseUrl + "https://stackoverflow.com/users/" + $scope.main.userId + "/online"); 
    $scope.online = {}; 
    angularFire(onlineRef, $scope, "online"); 

    var usersRef = new Firebase($scope.main.firebaseUrl + "/users"); 
    $scope.users = {}; 
    angularFire(usersRef, $scope, "users"); 

    var productRef = new Firebase($scope.main.firebaseUrl + "/products/" + $scope.main.serieId); 
    $scope.product = {}; 
    angularFire(productRef, $scope, "product"); 

    var connectedRef = new Firebase($scope.main.firebaseUrl + "/.info/connected"); 
    connectedRef.on("value", function(snap) { 
     if (snap.val() === true) { 
      onlineRef.onDisconnect().set(Firebase.ServerValue.TIMESTAMP); 
      onlineRef.set(true); 
     } 
    }); 
}); 

ИЛИ

$scope.fire = { 
    refs: { 
     online: new Firebase($scope.main.firebaseUrl + "https://stackoverflow.com/users/" + $scope.main.userId + "/online"), 
     users: new Firebase($scope.main.firebaseUrl + "/users"), 
     product: new Firebase($scope.main.firebaseUrl + "/products/" + $scope.main.serieId), 
     connected: new Firebase($scope.main.firebaseUrl + "/.info/connected") 
    } 
}; 

angularFire($scope.fire.refs.online, $scope, "fire.online"); 
angularFire($scope.fire.refs.users, $scope, "fire.users"); 
angularFire($scope.fire.refs.product, $scope, "fire.product"); 
angularFire($scope.fire.refs.connected, $scope, "fire.connected"); 

$scope.fire.refs.connected.on("value", function(snap) { 
    if (snap.val() === true) { 
     $scope.fire.refs.online.onDisconnect().set(Firebase.ServerValue.TIMESTAMP); 
     $scope.fire.refs.online.set(true); 
    } 
}); 

Я не имею в виду, чтобы сделать это лучше практики вопрос. Firebase так же новичок, что я не хочу сломать что-либо, о чем я еще не знаю.

ответ

9

Нет абсолютно никакой проблемы с созданием нескольких ссылок на Firebase или объектов angularFire (это действительно поощряется). Вы можете использовать функцию child, чтобы немного почистить код:

angular.module("myapp", ["firebase"]). 
value("URL", "https://my-firebase.firebaseio.com/"). 
controller("SocialCtrl", function($scope, URL, angularFire) { 
    var ref = new Firebase(URL); 
    angularFire(ref.child("users"), $scope, "users"); 
    angularFire(ref.child("users/" + $scope.main.userId + "/online", $scope, "online"); 
    angularFire(ref.child("products/" + $scope.main.serieId, $scope, "products"); 
    ref.child(".info/connected").on("value", ...); 
} 
+0

Спасибо за подсказку '.child', очень полезная. Я завернул корневую ссылку на угловой фабрике и теперь вызываю «.child» для всех других потребностей. Результат очень чист. – SimplGy