Функция ng-init не получает непосредственно при загрузке из Firebase
У меня есть этот код для извлечения данных из Firebase
.controller('CouCtrl', function($scope, $stateParams) {
$scope.selectcc = function ()
{
var depid = $stateParams.did;
var ccref = firebase.database().ref('/Course/').orderByChild('D_id').equalTo(depid);
ccref.once('value').then(function (snapshot) {
$scope.courses = snapshot.val();
});
}
})
и это мой HTML-код
<ion-view class="bk">
<ion-content ng-init="selectcc()">
<ion-list>
<ion-item ng-repeat="e in courses" href="#/tab/results/{{e.CC_id}}">
{{e.CC_id}}
</ion-item>
</ion-list>
</ion-content >
</ion-view>
код работает правильно, но я должен вернуться и снова вернуться на страницу, чтобы показать список ионов. "не отображается непосредственно при загрузке страницы
1 ответ
Обещания Firebase - это не обещания AngularJS
Обещания, возвращаемые API Firebase, не интегрированы с платформой AngularJS.
Используйте $q.when для создания обещания AngularJS из обещания Firebase:
$scope.selectcc = function () {
var depid = $stateParams.did;
var ccref = firebase.database().ref('/Course/').orderByChild('D_id').equalTo(depid);
//USE $q.when
$q.when(ccref.once('value')).then(function (snapshot) {
$scope.courses = snapshot.val();
});
}
AngularJS изменяет обычный поток JavaScript, предоставляя собственный цикл обработки событий. Это разбивает JavaScript на классический и AngularJS контекст выполнения. Только операции, которые применяются в контексте выполнения AngularJS, выиграют от привязки данных AngularJS, обработки исключений, отслеживания свойств и т. Д.
Обещание Firebase необходимо преобразовать в обещание AngularJS, чтобы перенести событие в контекст выполнения AngularJS.
$ Q.when (значение)
Оборачивает объект, который может иметь значение или обещание (от третьей стороны) в обещание $ q. Это полезно, когда вы имеете дело с объектом, который может или не может быть обещанием, или если обещание исходит из источника, которому нельзя доверять.