2015-07-17 5 views
0

Я создаю цикл forEach. Я могу получить доступ к данным из Firebase с помощью этого цикла, и я могу изменить переменную. Но я не могу сохранить эти изменения в Firebase. Как сохранить эти изменения? Вот мой код:Как сохранить данные в цикле forEach?

var posts = $firebaseArray(ref); 

posts.$loaded().then(function(item){ 
    item.forEach(function(childSnapshot){ 
    var num = childSnapshot.point-1; 

    childSnapshot.lastPoint = num; 
    }); 
}); 
+0

вам нужно использовать $ save для сохранения изменений. –

+0

@GopinathShiva Когда я использую $ save, он дает ошибку: undefined function. – user3288548

ответ

1

Вы используете AngularFire framework, который создает привязки пользовательского интерфейса поверх обычного SDK Firebase. Вы должны использовать его только для вещей, которые вы привязываете к элементам Углового интерфейса. Для всего остального вам, вероятно, лучше использовать Firebase's regular JavaScript SDK.

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

ref.once('value', function(snapshot) { 
    snapshot.forEach(function(childSnapshot) { 
    var child = childSnapshot.val(); 
    childSnapshot.ref().update({ lastPoint: child.point - 1 }); 
    }); 
}); 

соответствующие разделы документации Firebase находятся на reading data once и updating data.

Поскольку AngularFire построен поверх SDK Firebase, они отлично работают вместе. Поэтому, если в другом месте вы привязываете сообщения к области ($scope.posts = $firebaseArray(ref)), они будут обновляться автоматически, когда вы обновляете последнюю точку с помощью вышеприведенного фрагмента.

+0

Это работает. Огромное спасибо. – user3288548

+0

Добро пожаловать. Пожалуйста, также запомните этот первый абзац, так как он сэкономит вам много проблем в будущем: используйте AngularFire для привязки к пользовательскому интерфейсу. Для всего остального придерживайтесь SDK Firebase. –

0

Вы можете создать сервис, содержащий геттер и сеттер. Это будет выглядеть примерно так:

angular.module('app').factory("DataHandler", 
    function() { 
    var data; 
    return { 
     get: function() { 
     return data; 
     }, 
     set: function(something) { 
     data = something; 
     } 
    } 
    } 
); 

Тогда в вашем коде вы могли бы назвать:

var posts = $firebaseArray(ref); 

posts.$loaded().then(function(item){ 
    item.forEach(function(childSnapshot){ 
    var num = childSnapshot.point-1; 
    childSnapshot.lastPoint = num; 
    DataHandler.set(childSnapshot); 
    }); 
}); 

Тогда, где/когда вам нужно получить эти данные только по телефону:

Datahandler.get(); 
+0

Не работает. – user3288548

+0

Размышление о том, как вы его реализовали? –

+0

Упс, это моя ошибка. Ваш код работает отлично, но я хочу сохранить данные в цикле forEach. По-моему, я должен написать функцию для сохранения Datahandler.get() в Firebase. Я не знаю, как это сделать. – user3288548

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