2014-10-28 106 views
0

我不太確定我在做什麼錯,但看起來我的profile在我們到達MainCtrl時沒有解決。 user然而,解決。我是否可能沒有在Auth服務中正確提取個人資料信息?UI路由器不會解析諾言

路由器:

angular.module('app') 
    .config(function ($stateProvide) { 
     $stateProvider 
      .state('main', { 
       url: '/main', 
       templateUrl: 'app/main/main', 
       controller: 'MainCtrl', 
       resolve: { 
        user: function (Auth) { 
         return Auth.getUser(); 
        }, 
        profile: function (user) { 
         return Auth.getProfile(); 
        } 
       } 
      }); 
    }); 

控制器:

angular.module('app') 
    .controller('MainCtrl', function ($scope, user, profile) {  
     $scope.user = user; 
     $scope.profile = profile; <- DOESNT RESOLVE 
    }); 

驗證服務:

angular.module('app') 
    .factory('Auth', function ($firebaseSimpleLogin, $firebase, FBURL) { 
     var ref = new Firebase(FBURL); 
     var auth = $firebaseSimpleLogin(ref); 

     var Auth = { 
      user: {}, 
      getUser: function() { 
       return auth.$getCurrentUser(); 
      }, 
      getProfile: function(uid) { 
       return $firebase(ref.child('users').child(uid)).$asObject(); 
      } 
     }; 
     return Auth; 
    }); 

回答

1

喜歡的東西

auth.$getCurrentUser() 
所以你需要你的回調完全

在你的情況之前

.then(function(user) { 

事件,你可能只是解決在then

返回一個承諾,像

Auth.getUser().then(function(user){ return user; }); 

而且$asObject()需求$loaded()爲它的承諾

var obj = $firebase(ref).$asObject(); 
obj.$loaded() 
.then(function(data) {}) 
+0

就是這樣!我必須有'$ loaded()'返回一個承諾。謝謝! – Genu 2014-10-29 02:33:09

0

試試這個結構爲您的承諾:

var fetchSomething = function (action, params) { 
     var promise = $http({ 
      method: 'POST', 
      url: 'someurl to the firebase', 
      data: params, 
      headers: { 
       'Access-Control-Allow-Origin': true, 
       'Content-Type': 'application/json' 
      } 
     }).success(function (data, status, headers, config) {     
      return data; 
     }); 
     return promise; 
    };