2014-02-02 2 views
2

Как я могу создать индекс для данных объекта, который я передаю в Firebase?Индексирование объектов firebase

Я использую функцию .$add в библиотеке AngularFire для ввода данных. Это фильтр и контроллер, который я использую:

angular.module('bestDay', ["firebase"]).factory("GreatService", ["$firebase", function($firebase) { 
    var ref = new Firebase("https://quickjournal.firebaseIO.com/"); 
    return $firebase(ref); 
}]) 
.controller("bdctrl", ["$scope", "GreatService", 
    function($scope, greatService) { 
     $scope.theval = "Val " + Math.round(Math.random()*101); 
     $scope.daylist = greatService; 
     $scope.addDayGood = function() { 
      $scope.daylist.$add({ 
       desc: $scope.newDay.desc, 
       date: $scope.newDay.date, 
       value: $scope.theval 
      }); 
      $scope.newDay.desc = ""; 
      $scope.newDay.date = ""; 
     }; 
    } 
]); 

Как вы можете видеть, я пытался использовать уникальное значение при переходе объектов в, но это было только генерировать один и тот же номер каждый раз, когда (13) , Если это не очевидно, я новичок в программировании.

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

Я прочесал документацию библиотеки firebase и angularfire без каких-либо результатов. Если бы вы могли указать мне URL с документацией по этому вопросу, это было бы очень признательно.

+0

Когда вы говорите «индекс», вы имеете в виду «уникальный идентификатор»? Потому что в этом случае вам нужно просто использовать функцию «push», чтобы Firebase сгенерировала идентификатор для ваших новых данных. См. Https://www.firebase.com/docs/javascript/firebase/push.html –

ответ

1

Firebase должен делать индексацию, так как это упрощает работу, если у вас есть несколько пользователей, которые обращаются к тем же данным.

Что касается вашего вопроса, вы должны найти https://www.firebase.com/docs/ordered-data.html для работы со списками в firebase.

Подробнее о том, что предоставленная функция push() обеспечивает удобную хронологическую сортировку, и если вам нужна более сложная сортировка, вы можете посмотреть функцию setWithPriority().

angular.module('bestDay', ["firebase"]) 
.controller("bdctrl", ['$scope', '$firebase', 
    function($scope,$firebase) { 
     var daysRef = new Firebase("https://quickjournal.firebaseIO.com/daylist/"); 
     $scope.dayList = $firebase(daysRef); 
     $scope.dayLocationInFirebase = daysRef.push(); 
     $scope.addDayGood = function(){ 
           // Setdata to the generated location 
           $scope.dayLocationInFirebase.set({ 
               desc: $scope.newDay.desc, 
               date: $scope.newDay.date 
              }); 

           //holds reference to location the object was pushed to, for direct manipulation of the value. Pass it to the scope or an array if you need it for later 
           var pushedName = $scope.dayLocationInFirebase.name(); 
           alert(pushedName); 
           $scope.newDay.desc = ""; 
           $scope.newDay.date = ""; 
          } 


    } 
]); 
+0

Этот код не работает. Я получаю сообщение об ошибке в моем методе .push(): ТипError: Объект # не имеет метода 'push' Это из-за того, что мои библиотеки упорядочены? В тегах я перехожу в angularjs, затем в firebase.js, затем в angularfire, затем в файл javascript script.js. Это репо, если вы хотите увидеть полный код: [Repo] (https://github.com/JordanFarnworth/BestDay) – jfarn23

+0

Я отредактировал код из вашего git repo, и этот работает. Остерегайтесь шапок. Функция push() принимает ссылку на базовую станцию. В предыдущем (и неправильном) примере я сделал это с возвращенными объектами. –

+0

Огромное спасибо Димитрию! – jfarn23

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