2015-12-29 5 views
1

У меня есть следующая структура на моем firebasefirebase список прибудет детский узел

"users" : { 
"06f0536d-2326-43a0-81db-9e94acc77b4e" : { 
    "address" : "xxxxxxxxxxxxx", 
    "displayName" : "xxxxxxx", 
    "email" : "[email protected]", 
    "fleet" : { 
    "-K6iGFIu5Jwu_AmWWDTL" : { 
     "avafrom" : 1451343600000, 
     "avauntil" : 1454540400000, 
     "brands" : "xxxxxxxxxx", 
     "desc" : "xxxxxxxxxxxx", 
     "dmile" : 5, 
     "drate" : 22, 
    }, 
    "-K6iGUY6Y19PExwBklal" : { 
     "avafrom" : 1451516400000, 
     "avauntil" : 1454540400000, 
     "brands" : "xxxxx", 
     "desc" : "xxxxxxxxxxxxx", 
     "dmile" : 5, 
     "drate" : 12, 
    } 
    }, 
    "phone" : "+49xxxxxxx", 
    "role" : "xxxxxxxxxxx" 
}, 
"22dbc365-3201-4bc0-9f19-2a8a64bea235" : { 
    "address" : "xxxxxxxxxxx", 
    "displayName" : "xxxx", 
    "email" : "[email protected]", 
    "fleet" : { 
    "-K6ge_Y4enb_a13O1eCu" : { 
     "avafrom" : 1451343600000, 
     "avauntil" : 1451516400000, 
     "brands" : "xxxxxxxxxxx", 
     "desc" : "xxxxxxxxxxxxx", 
     "dmile" : 1, 
     "drate" : 22, 
    }, 
    "-K6gexE9KXd3WGBnjIY8" : { 
     "avafrom" : 1451343600000, 
     "avauntil" : 1451516400000, 
     "brands" : "xxxxxxxxxx", 
     "desc" : "xxxxxxxxxxxxxx", 
     "dmile" : 1, 
     "drate" : 22, 
    } 
    }, 
    "phone" : "+49xxxxxx", 
    "role" : "xxxxxxx" 
}, 

и Как получить список флота всех пользователей с этим? я попытался следующие:

var ref = new Firebase(fb+'users'); 
     return { 
      fleet: function(){ 
       ref.orderByChild("fleet").on("child_added", function(snapshot) { 
        console.log("data trucks", snapshot.val()); 
        return snapshot.val(); 
       }) 
      } 
     } 

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

Любой помощь будет оценена, спасибо заранее

ответ

0

Если вы хотите только узлы fleet, вам нужно будет перестроить ваши данные. Когда вы читаете данные из родительского узла, вы также получите все дочерние узлы.

Вы можете ввести прочь uid для fleet, вот пример:

{ 
    "users": { 
     "06f0536d-2326-43a0-81db-9e94acc77b4e" : { 
     "address" : "xxxxxxxxxxxxx", 
     "displayName" : "xxxxxxx", 
     "email" : "[email protected]" 
     } 
    }, 
    "fleet": { 
     "06f0536d-2326-43a0-81db-9e94acc77b4e" : { 
     "-K6ge_Y4enb_a13O1eCu" : { 
      "avafrom" : 1451343600000, 
      "avauntil" : 1451516400000, 
      "brands" : "xxxxxxxxxxx", 
      "desc" : "xxxxxxxxxxxxx", 
      "dmile" : 1, 
      "drate" : 22 
     } 
     } 
    } 
} 

Вы также не можете вернуться из функции асинхронной.

ref.orderByChild("fleet").on("child_added", function(snapshot) { 
    return snapshot.val(); // won't work 
}) 

Данные должны быть загружены с течением времени, поэтому их не произойдет синхронно.

Вы могли бы пройти в обратном вызове:

function FleetFactory() { 
    var ref = new Firebase(fb+'users'); 
    return { 
    fleet: function(callback){ 
     ref.orderByChild("fleet").on("child_added", callback); 
    } 
    } 
} 

function MyController(FleetFactory) { 
    FleetFactory.fleet(function(snap) { 
     console.log(snap.val()); 
    }); 
} 

Но, это еще не ваша идеальная ситуация.

Use AngularFire, which wraps each Firebase event to a synchronized array.

angular.module('app', ['firebase']) 
    .constant('FirebaseUrl', '<my-firebase-app>') 
    .service('rootRef', ['FirebaseUrl', Firebase]) 
    .controller('MyCtrl', MyController); 

function MyController($scope, rootRef, $firebaseArray) { 
    $scope.fleet = $firebaseArray(rootRef.child('fleet')); 
} 

Не пытайтесь console.log($scope.fleet), потому что он будет изначально отображаться пустой, потому что данные по-прежнему загрузке. Однако, как только данные загрузятся, он вызовет цикл $digest, и данные появятся на странице.

Попробуйте делать json фильтр в шаблоне для теста:

<pre>{{ fleet | json ||</pre> 
+0

спасибо за ваш ответ, я попробовал методы обратных вызовов, но она по-прежнему дает мне все объекты дерева пользователей, мне нужно только, чтобы получить список флот от всех пользователей, а не все данные от пользователей. и для второго метода, использующего массив из моего контроллера, он возвращает пустой массив, возможно, из-за уникального идентификатора из каждого элемента флота? кажется, что он не может найти дочерний узел от флота. –

+0

Посмотрите мою обновленную структуру данных. –

+0

Спасибо, я могу получить список всех пользователей флота, но как я могу показать, например, этот флот, принадлежащий «displayName», в настоящее время im, использующий ng-repeat = «item in fleet» для итерации массива флота, m путают о том, как получить данные о владении флотом с других узлов. –

Смежные вопросы