#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().