Довольно новый угловому & Firebase здесь, но заметил странное поведение запросов и представляя упорядоченные данные, которые не адресованы нигде еще ...Угловое ngRepeat не сохраняет порядок пунктов приоритета Firebase?
Я толкающие данные в firebase и установление приоритетов с нисходящим отрицательным значением так что новейшие данные находятся в верхней части списка.
При получении ref с child_added
событиями, я могу подтвердить, что данные поступают в правильном порядке; однако при использовании с ngRepeat данные каким-то образом восстанавливаются (новейшие данные отображаются внизу списка ngRepeat).
Если я использую что-то вроде .append()
, данные будут правильно упорядочены. Но скорее сделайте это «Угловым» способом с ngRepeat.
// example html binding
// ====================================
<ul>
<li ng-repeat="(itemID, item) in list">{{itemID}}</li>
</ul>
// example controller code
// ====================================
var laApp = angular.module('laApp', ['firebase']);
laApp.controller('laAppCtrl', function ($scope, $timeout){
var ref = new Firebase('https://ngrepeatbug.firebaseio.com');
$scope.pushPriority = function(){
var uid = new Date().getTime();
var priority = 0 - uid;
// set with -priority so newest data on top
ref.push().setWithPriority(uid, priority);
}
$scope.list = {};
ref.orderByPriority().on('child_added', function(snap){
$timeout(function(){
var snapID = snap.key();
var snapVal = snap.val();
//repeat method
$scope.list[snapID] = snap.val();
//append method
$('ul.append').append("<li>" + snapVal + "</li>")
})
})
});
Pen сравнивающего ngRepeat и присоединять методы: http://codepen.io/juddam/pen/dIiLz
Я прочитал другие решения, которые либо преобразующие $scope.list
объекта в массив, который затем используется с фильтром или $ реверсивного порядком на клиенте, но это победил всю цель хранения данных по приоритету и имел простой метод для запроса и представления упорядоченных данных.
Знать orderByPriority является новым для firebase v2.0, так что интересно, если ошибка или я что-то не хватает?
Объекты в javascript не имеют установленного ключевого порядка, поэтому нет способа гарантировать, какой ключ будет отображаться перед другим, не помещая их в массив и не сортируя его. –
Спасибо Зак - я знал, но так как порядок отображения был последовательно в обратном порядке, может быть, не хватало чего-то другого. – juddm