#angularjs #firebase #angularfire
#angularjs #firebase #angularfire
Вопрос:
Для приложения RSS я хочу прочитать массив объектов JSON (каждый из которых представляет параметры отдельного канала) из Firebase.
Без Firebase приложение работает на основе объявления
$scope.rssSourcesTest = [
{'aid': 'urlaub99euro', 'atitle': 'Urlaub99Euro', 'aurl': 'http://www.urlaub99euro.de/rss3b/', 'atags': 'deutschland'},
{'aid': 'urlaub_fm', 'atitle': 'urlaub.fm', 'aurl': 'http://urlaub.fm/rss/', 'atags': ''}
];
Запись $scope.rssSourcesTest в Firebase работает. Чтение массива обратно также работает, но я не могу присвоить результирующий массив rssSources2 переменной области видимости, такой как $scope.rssSources2 .
Я прочитал здесь много статей об этом, решение может включать $timeout или $apply(). Вот тест.
// Test Read rssSources from Firebase ************************
// Test Array
$scope.rssSourcesTest = [
{'aid': 'urlaub99euro', 'atitle': 'Urlaub99Euro', 'aurl': 'http://www.urlaub99euro.de/rss3b/', 'atags': 'deutschland'},
{'aid': 'urlaub_fm', 'atitle': 'urlaub.fm', 'aurl': 'http://urlaub.fm/rss/', 'atags': ''}
];
// console.log($scope.rssSourcesTest[0].aid);
// works!
// write
var sourcesFB = new Firebase("https://xxxxxxxx.com/sourcestest");
sourcesFB.set($scope.rssSources);
// works
// read
var rssSourcesRef = new Firebase("https://xxxxxxxx.com/sourcestest/");
rssSourcesRef.on('value', function(snap) {
rssSources2 = snap.val();
console.log("read from FB data ..: " rssSources2[0].aid);
// works
});
console.log($scope.rssSources2[0].aid);
// is $scope.rssSources2 is undefined
// /Test Read rssSources from Firebase ************************
Ответ №1:
$scope.rssSources2 и rssSources2 — это две разные переменные. Заменить:
rssSources2 = snap.val();
с:
$scope.rssSources2 = snap.val();
Комментарии:
1. Частично исправлено. Все равно нужно использовать $timeout или $scope. $digest() для вызова грязной проверки и компилятора, иначе изменения не будут отображаться до следующего события дайджеста.
2. Большое спасибо за ответ (хотя это было ясно) и комментарий. по какой-то причине $timeout не сработал, он выдал ошибку с undefined в console.log. Вставка строки $scope.$digest(); решила всю проблему — спасибо Като. var rssSourcesRef = new Firebase(» xxxxxx.com/sources /» ); rssSourcesRef.on(‘значение’, функция (моментальный снимок) { // $timeout(функция() { $scope.rssSources = snapshot.val(); // }) $scope.$digest(); console.log(«чтение из данных FB ..: » $scope.rssSources[1].aid); // работает });