Функция 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. Это полезно, когда вы имеете дело с объектом, который может или не может быть обещанием, или если обещание исходит из источника, которому нельзя доверять.

- Справочник по API AngularJS $ q - $q.when

Другие вопросы по тегам