2016-07-31 2 views
0

Я загружаю данные из Firebase, но только каждый секунда времени или около того, данные отображаются в представлении, но также только если я обновляю. Иногда даже когда я обновляю кулак во второй раз. Когда я переключаю представления в приложении, данные вообще не отображаются.Http-запрос не загружается, как только угловой вид загружается

В чем моя ошибка?

.controller('CatsCtrl', function($scope, $state, $http) { 

    $scope.init = function() { 

    var ref = firebase.database().ref("Entries"); 
    ref.once("value") 
    .then(function(snapshot) { 
     $scope.tmp = snapshot.val(); 
     $scope.data = $scope.tmp.kategorienamen 

    }); 

    } 


}) 

HTML

<ion-view ng-init="init()"> 
    <ion-header-bar align-title="center" class="bar-top no-bgColor"> 
    <h1 class="title-top">Kategorien</h1> 
</ion-header-bar> 
<ion-content overflow-scroll="true" class="has-header has-footer bg" scroll="true"> 

    <div ng-repeat="cat in data" class="animated lightSpeedIn"> 
     <a nav-transition="none"><div ng-style="{'background': 'url(' + cat.bgurl + ')','background-repeat': 'no-repeat','background-size': 'cover','display': 'block','width': '100%','height': '25vh' }" class="bgcat center"> 
     <div class="inner"> 
      <h1>{{cat}}</h1> 
      <h4>{{}}</h4> 
     </div> 
     </div></a> 
    </div> 
</ion-content> 
+1

Проблема в том, что вы переписываете наблюдаемую переменную. Вы можете либо использовать scope.apply, чтобы принудительно обновить представление или использовать директиву, чтобы он возвращал некоторое содержимое после выполнения запроса. Любой из этих методов не является чистым решением, так как лучше всего будет использовать метод запросов собственного углового, чтобы он мог переименовать его самостоятельно. – Marcus

ответ

0

Есть много способов кожи кошки, но здесь один, и вы должны прочитать об остальных из них

$scope.data = ref.once("value"); 

Edit: Как предложено .once возвратов обещание уже https://www.firebase.com/docs/web/api/query/once.html

+0

Почти: 'ref.once()' возвращает обещание, поэтому правильная форма '$ scope.data = ref.once (" value ");'; –

+0

Спасибо! Не могли бы вы поделиться ссылкой? – olivier

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