Firebase加载$ scope视图输入不加载

时间:2016-07-31 15:33:44

标签: angularjs firebase

我在Firebase中遇到了加载问题。我想在打开视图时显示图像列表,但在我回去之前没有任何反应(有闪光灯,我可以看到我的照片列表)。它正在工作但没有在开幕式中显示。
我错过了什么?

我的Controller视图的开头是:

'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());
      });
  }; 

});

2 个答案:

答案 0 :(得分:0)

由于firebase可以使用异步调用,因此当firebase响应您的数据时,角度周期已经完成,您不会更新您的范围。您可以使用$scope.$apply();强制它。

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

有一种工具可以集成角度和火力基础,使您不必担心应用范围等问题。它被称为angularfire。我完全建议你开始在你的应用程序中使用它。

使用angularfire,您只需使用

即可获取数据
$scope.bidule = $firebaseObject(ref_images.child(idxSnap.key));

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

答案 1 :(得分:0)

我创建了一个工厂

.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;
            }
      };
  })

然后在我的控制器中,我换了就像你说的那样:

        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);
        };

它就像一个魅力!再次感谢你:)