2016-07-31 6 views
1

ich ein Ladeproblem in Firebase haben. Ich möchte eine Liste von Bildern anzeigen, wenn ich die Ansicht öffne, aber nichts passiert, bis ich zurück gehe (es gibt einen Blitz und ich kann meine Fotoliste sehen). Es funktioniert, aber nicht in der Eröffnung angezeigt.
Was bin ich bitte?

Es ist der Anfang meiner Controller-Ansicht:

'Use Strict'; 
angular.module('App').controller('valider_photosController', function($scope, $state, $localStorage, Popup, Firebase, $firebaseObject, $ionicHistory, $ionicPopup, $ionicModal, $cordovaCamera) { 

    $scope.imagestab = []; 
    var ref_logements = firebase.database().ref('logements'); 
    var ref_images = firebase.database().ref('images'); 

    ref_logements.child(id_logement).child('images').on('child_added', added); 

    function added(idxSnap, prevId){ 
     ref_images.child(idxSnap.key).once('value', function(datasnap){ 
      var bidule = datasnap.val(); 
      bidule['key'] = datasnap.key; 
      $scope.imagestab.push(bidule); 
      console.log('La valeur'+datasnap.key+'donne '+datasnap.val()); 
     }); 
    }; 

}); 

Antwort

0

Seit Feuerbasis arbeitet mit asynchronen Aufrufen durch die Zeit, Feuerbasis reagiert mit Ihren Daten der Winkelzyklus bereits beendet hatte und Sie haben Ihren Umfang nicht aktualisiert . Sie können es erzwingen, indem Sie $scope.$apply(); verwenden.

ref_images.child(idxSnap.key).once('value', function(datasnap){ 
     var bidule = datasnap.val(); 
     bidule['key'] = datasnap.key; 
     $scope.imagestab.push(bidule); 
     $scope.$apply(); 
}); 

Es ist ein Werkzeug, das in einer Weise, Winkel- und Feuerbasis integriert, dass Sie nicht mit Dingen wie die Anwendung den Umfang betroffen sein müssen. Es heißt angularfire. Ich empfehle Ihnen dringend, es in Ihrer Anwendung zu verwenden.

Mit angularfire können Sie Ihre Daten bekommen einfach mit

$scope.bidule = $firebaseObject(ref_images.child(idxSnap.key)); 

oder

$scope.images = $firebaseArray(firebase.database().ref('images')); 
+0

Du hast Recht! Angularfire ist perfekt für dieses Dankeschön ... wieder :) –

0

habe ich eine Fabrik

.factory('Firebase', function ($firebaseArray, $firebaseObject) { 
     var ref = firebase.database().ref(); 
     return { 
      all: function (section) { 
       var data = $firebaseArray(ref.child(section)); 
       return data; 
      }, 
      getById: function (section, id) { 
       var data = $firebaseObject(ref.child(section).child(id)); 
       return data; 
      }, 
      get: function (section, field, value) { 
       var data = $firebaseArray(ref.child(section).orderByChild(field).equalTo(value)); 
       return data; 
      } 
     }; 
    }) 

Und dann in meinem Controller, i wie Sie ersetzt die :

 var ref_logements = firebase.database().ref('logements'); 
     var ref_images = firebase.database().ref('images'); 
     ref_logements.child(index2).child('images').on('child_added', added); 

     function added(idxSnap, prevId) { 
      var monimage = Firebase.getById('images', idxSnap.key); 
      $scope.imagestab.push(monimage); 
     }; 

und es funktioniert wie ein Charme! Vielen Dank noch einmal :)

+0

Whaouu, ich möchte dir @adolfosrs wirklich danken, weil ich alle Referenzen in meiner App mit angularFire geändert habe und es jetzt wirklich schnell und sauber ist. –

Verwandte Themen