角度渲染引擎& Firebase配置文件检索

时间:2014-03-03 19:15:10

标签: angularjs firebase

我想要的是什么:

  • firebase检查页面加载的身份验证
  • firebase返回用户ID(如果已登录)
  • 我的函数返回与 user.Id
  • 相关联的用户名
  • 分配给代表用户名的变量
  • 呈现!
  • 全部页面加载

当前行为:

以下配置检索用户名,但只有在我点击登录按钮后才会显示用户名。出于某种原因,即使我当前已登录,也必须单击登录按钮。我想要一个设置,如果我登录应用程序只会知道我从一开始就登录了!

crossfitApp.controller('globalIdCtrl', ["$scope",'$q','defautProfileData','$timeout', function ($scope,$q,defautProfileData,$timeout) {

                    var  dataRef =   new Firebase("https://glowing-fire-5401.firebaseIO.com");

        $scope.myFbvar =null;
        $scope.authenticated={
                               currentUser: null,
                               avatarUrl: "", 
                               emailAddress: "",
                                   settings: "",
                                   currentUserid: null,

                            };


        function getProfile(userID,assignMe){

            myprofile= new Firebase("https://glowing-fire-5401.firebaseio.com/profiles/"+userID+"/username");
            myprofile.once('value', function(nameSnapshot) {
                                                            assignMe = nameSnapshot.val();                                                    
                                                        });
            };





                    $scope.auth = new FirebaseSimpleLogin(dataRef, function(error, user) {

                                            if (error) {
                                                                      //Error
                                                    console.log ('error');

                                                } 
                                                else if (user) {
                                                                      //logged in 
                                                    $timeout(function() {

                                                        getProfile(user.id,);

                                                     });
                                                     console.log('logged in');
                                                     $scope.authenticated.currentUserid = user.id ;




                                             }
                                                 else {
                                                     // user is logged out
                                                     console.log('logged out');
                                                     $timeout(function() {
                                                            $scope.authenticated.currentUserid =null;
                                                    });
                                             }


                                      });


    }]);  //Global

1 个答案:

答案 0 :(得分:0)

在你的else if( user )逻辑中,你忘了将你的范围var放在$ timeout内,所以它被正确设置,但Angular在下次调用$ apply之前不会了解它(例如ng - 点击,ng-submit等)。

因此:

else if (user) {
   //logged in 
   $timeout(function() {
      getProfile(user.id,);
      $scope.authenticated.currentUserid = user.id ; // moved into $timeout
  });
  console.log('logged in');
}

您可以详细了解重要原因herehere