1

Я пытаюсь вернуть результаты моментального снимка Firebase в виде массива, чтобы через них можно было выполнить ng-repeat (по умолчанию оно возвращало объекты). В последней строке я пытаюсь установить объекты в массиве и установить их в область, подлежащую повторению. Но я, кажется, путаюсь с базовой концепцией установки значения в массив:/Любая помощь будет отличной.Получение моментального снимка Firebase в качестве массива и установка в область

const businessKey = '-KQ1hFH0qrvKSrymmn9d'; 
const rootRef = firebase.database().ref(); 
const discoverRef = rootRef.child('discover'); 
const businessRef = rootRef.child('businesses'); 


function getDiscoverBarContent(key, cb) { 
    discoverRef.child(key).on('child_added', snap => { 
     let businesRef = businessRef.child(snap.key); 
     businesRef.once('value', cb); 
    }); 
} 

getDiscoverBarContent(businessKey, snap => { 
    snap.forEach((child) => { 
     var item = {}; 
     item._key = snap.val(); 
     array.push(item); 
     /*$scope.discover = array*/ 
     }) 
}); 

ответ

0

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

$scope.discover = []; 
const businessKey = $scope.finalItem.$id; 
const rootRef = firebase.database().ref(); 
const discoverRef = rootRef.child('discover'); 
const businessRef = rootRef.child('businesses'); 


function getDiscoverBarContent(key, cb) { 
    discoverRef.child(key).on('child_added', snap => { 
     let businesRef = businessRef.child(snap.key); 
     businesRef.once('value', cb); 
    }); 
} 

getDiscoverBarContent(businessKey, snap => { 
    var snapVal = snap.val(); 
    $scope.discover.push(snapVal); 
}); 

Во-первых, для предотвращения ошибок, мы добавили верхнюю $scope.discover = []. Во-вторых, я не мог forEach через объект Firebase. Вместо этого мне нужно было установить snap.val() на переменную и нажать ее в мой $scope.discover. Теперь данные можно повторить через ng-repeat="place in discover track by $index", как и ожидалось. Спасибо за другой совет, но это улучшилось для моего текущего кода. Я определенно буду держать в голове другой совет, но если начать.

0

Пробег: angularfire.

Angularfire - удобный помощник для firebase, предоставляющий вам несколько полезных инструментов для создания угловых приложений. он включает в себя 3 основные услуги. просто вставьте один (-ых), который вам нужен в каждом контроллере. убедитесь, что firebase уже инициализирован первым:

$firebaseAuth $firebaseObject $firebaseArray

Вот как вы используете $firebaseArray:

const businessKey = '-KQ1hFH0qrvKSrymmn9d'; 
const rootRef = firebase.database().ref(); 
const discoverRef = rootRef.child('discover'); 
const businessRef = rootRef.child('businesses'); 


function getDiscoverBarContent(key, cb) { 
    let myArray = $firebaseArray(discoverRef.child(key)); 
    myArray.$loaded().then(() => { cb(a) }); 
} 

getDiscoverBarContent(businessKey, data => { 
    // ctrl.property = data 
    // $scope.property = data; 
}); 

Если я получил какой-либо синтаксис неправильно, я извиняюсь. Я по-прежнему использую классический синтаксис JS, ни один из этих es5/es6, какого бы черт он ни называл.

Документация для angularfire: https://github.com/firebase/angularfire/blob/master/docs/reference.md

Unrelated, но если вам нужно легко постраничной в угловатый, спасите себя проблемы и использовать следующую библиотеку: https://github.com/deltaepsilon/firebase-paginator

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

  • Нет связанных вопросов^_^