UI路由器不会解决承诺

时间:2014-10-28 02:29:32

标签: angularjs angular-ui-router angularfire

我不太确定我做错了什么,但似乎我的profile在我们到达MainCtrl时并没有解决。然而,user会解决。我可能没有在Auth服务中正确提取个人资料信息吗?

路由器:

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

2 个答案:

答案 0 :(得分: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) {})

答案 1 :(得分: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;
    };