Я чувствую, что мне не хватает чего-то очень простого. Вот часть моего обслуживания:
angular.module('fire')
.constant('FIREBASE_URI', 'https://___.firebaseio.com/')
.factory('syncArraySvc', function(FIREBASE_URI, $firebaseArray) {
var buildingsUri = FIREBASE_URI + "buildings";
var buildings = $firebaseArray(new Firebase(buildingsUri));
console.log(buildings);
var getBuildings = function() {
return buildings;
};
var addBuilding = function(item) {
buildings.$add(item);
};
return {
getBuildings: getBuildings,
addBuilding: addBuilding
};
});
Консоль.log в середине этого просто возвращает пустой массив. Если я попытаюсь вызвать функцию syncArraySvc.getBuildings()
с другого контроллера, я также получу пустой массив. Так или иначе, $add(item)
работает, как и syncArraySvc.addBuilding(item)
. Что мне не хватает?
Обещание '$ loaded 'разрешается при загрузке * начальных * данных. Он * не * разрешает, когда дополнительные элементы добавляются в массив. Все, что вам нужно сделать, это '$ scope.buildings = $ firebaseArray (новая Firebase (buildingsUri))'. И, пожалуйста, не используйте 'console.log' для отладки данных AngularFire, это легко приводит к недоразумениям. Вместо этого просто поставьте это где-то в своем представлении: '
' –@FrankvanPuffelen делает мой ответ выше, гарантирует, что данные были добавлены или нет. Я уверен, что он, безусловно, будет работать и отображать обновленные данные. –
Чтобы правильно расширить '$ firebaseArray' , читайте: https://www.firebase.com/docs/web/libraries/angular/guide/extending-services.html#section-firebasearray –