Снятие сдвига / добавление перед объектом Firebase с помощью AngularFire или ванильного JavaScript

#angularjs #firebase #angularfire

# #angularjs #firebase #angularfire

Вопрос:

У меня есть массив / объект, хранящийся в Firebase, в который я добавляю элементы с помощью $add функции AngularFire. $add это эквивалент использования .push в обычном массиве JavaScript. Указанное вами значение добавляется в конец массива.

Есть ли способ добавить мое значение в начало этого массива / объекта, хранящегося в Firebase? Что-то, что делает то же самое, .unshift что и в ванильном JavaScript?

Я бы предпочел решение AngularFire, но ванильные решения JavaScript подойдут, если их нет.

Ответ №1:

Поскольку данные не хранятся в массиве (до выхода AngularFire 0.8 на следующей неделе), а объекты не отсортированы в js, технически нет понятия front / back. Это достигается в Firebase путем сортировки ключей данных или с помощью приоритетов. Дополнительные сведения по этому вопросу см. в разделе Упорядоченные данные.

В AngularFire приоритеты хранятся в записях как $priority. Вы можете установить это значение перед сохранением записи, чтобы управлять порядком ее сортировки:

 var data = $firebase(ref);
data.$on('loaded', function() {
   data['foo'].$priority = 99;
   data.$save('foo');
});
 

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

Комментарии:

1. Я знал, что Firebase не поддерживает хранение массивов, только объектов, но также читал, что данные «переносятся» в массивы и из них, если вы работаете с массивами на стороне клиента. Я надеялся, что этот процесс «переноса» приведет к созданию массивоподобных индексов, но, похоже, это не так

2. Вот блог о лучших практиках Array , посвященный стороне Firebase. В AngularFire все является объектом до 0.8, когда вы можете вызвать функцию asArray().