【问题标题】:firebase with angular router never reaches controller带有角度路由器的firebase永远不会到达控制器
【发布时间】:2015-04-07 17:01:58
【问题描述】:

我想确保在加载我的应用之前从 firebase 获取数据。我正在使用此代码,但它不起作用:程序永远不会到达代码 deferred.resolve(); 并且 appCtrl 不运行... 有什么想法吗?

appCtrl:

.controller('AppCtrl', function($scope, $ionicModal, $timeout,$firebaseAuth,$state,myWordsListServ) {    
  $scope.myWordsList = myWordsListServ.contacts;
  console.log("myWordsList" , $scope.myWordsList);
})

myWordsListServ:

.factory('myWordsListServ', function($firebase, $q) {
  return {
    contacts: null,
    promiseToHaveMyLists: function() {
      var deferred = $q.defer();

       var firebaseMainRef = new Firebase("https://myApp.firebaseio.com");
       var authData = firebaseMainRef.getAuth();
       if(authData){
         this.contacts = $firebase(new Firebase("https://myApp.firebaseio.com/users/" + authData.uid));
         this.contacts.$on('value', function(loadedData) {
           deferred.resolve();
         });
       }
       else{
         deferred.resolve();
       }
      return deferred.promise;
    }
  };
})

我的 app.js 的一部分:

.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider

  .state('app', {
    url: "/app",
    abstract: true,
    templateUrl: "templates/menu.html",
    controller: 'AppCtrl',
    resolve : {
        myWordsList : function(myWordsListServ) {
            return myWordsListServ.promiseToHaveMyLists();
        }
    },
  })

【问题讨论】:

    标签: angularjs firebase angular-ui-router angularfire


    【解决方案1】:

    您似乎使用的是 AngularFire 1.0 之前的版本:

    this.contacts = $firebase(new Firebase("https://myApp.firebaseio.com/users/" + authData.uid));
    this.contacts.$on('value', function(loadedData) {
      deferred.resolve();
    });
    

    $firebase 类是一个中间对象,(如果我没记错的话)永远不会找到事件。您可能想要做的是:

    this.contacts = $firebase(new Firebase(...)).$asObject();
    

    这会返回一个$firebaseObject,它触发事件。

    您可能想升级到 AngularFire 1.0,在这种情况下,您会得到相同的结果:

    this.contacts = $firebaseObject(new Firebase(...));
    

    【讨论】:

    • 谢谢。我升级到 1.0 + 你的代码仍然有同样的问题
    • 如果你设置了一个 jsfiddle (jsbin/plunker/etc) 我会看看。我必须承认我不明白你为什么要使用自己的承诺。所以这将有助于小提琴也证明这一点。
    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 2016-06-22
    • 1970-01-01
    • 2015-02-28
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多