angularjs来自firebase的rootcope用户数据库信息

时间:2016-10-29 09:36:43

标签: angularjs firebase firebase-realtime-database firebase-authentication

我正在尝试从用户的数据库中获取用户信息,并使用rootscope从任何地方访问它。
当用户登录时,我会收到用户的电子邮件和uid。
但是,要获取用户的信息数据库,我需要调用我的数据库并逐个读取信息并将其作为变量存储在rootscope中,以便从任何地方访问它。

所以,我的问题如下:

  • 如何在此示例中使用rootscope?
  • 有没有更好的方法呢?
  • 在下面的示例中,控制台日志显示的是第一个名称,但我不知道如何对其进行rootcope?

感谢您的帮助。

app.run(['$rootScope', '$state', '$stateParams', '$cookies', "$location",
function ($rootScope, $state, $stateParams, $cookies, $location) {

    firebase.auth().onAuthStateChanged(function(user) {
        if (user) {

            $rootScope.user.uid = user.uid;
            $rootScope.user.email = user.email;

            return firebase.database().ref('/users/' + user.uid).once('value').then(function(snapshot) {

                var firstname = snapshot.val().firstname;
                console.log("first name", firstname);

            });
        } else {
            // No user is signed in.
        }
    });
}]);

2 个答案:

答案 0 :(得分:1)

有两种方法可以满足您的需求

方法1:

您可以执行此操作$rootScope.authData=user;然后通过注入$rootScope从任意位置访问它。但问题在于,当您刷新页面时$rootScope将为空检查此SO Question

方法2:

我更喜欢这种方法,您可以使用$getAuth()的{​​{1}}函数,angularfire是同步函数,它将为您提供当前用户数据。

$getAuth

for more detail check this

答案 1 :(得分:1)

如果您使用AngularFire 始终使用其包装方法与本机firebase方法。

不要使用

firebase.auth().onAuthStateChanged
firebase.database().ref('/users/' + user.uid).once('value')

使用

$firebaseAuth().$onAuthStateChanged
var userData = $firebaseObject(firebase.database().ref('/users/' + user.uid));

angularFire中查看以下链接,查看可用方法的完整列表。 https://github.com/firebase/angularfire/blob/master/docs/reference.md

我建议像这样修改你的代码。

$firebaseAuth().$onAuthStateChanged(function(user) {
    if (user) {
      $rootScope.user = $firebaseObject(firebase.database().ref('/users/' + user.uid));
      $rootScope.user.uid = user.uid;
      $rootScope.user.email = user.email;
      console.log("Here you should have complete user object");
      // still if you want to do something when user is loaded
      /* $rootScope.user.$loaded(function(loadedUser) {
            var firstname = loadedUser.firstname;
            console.log("first name", firstname);
        });*/
    } else {
        // No user is signed in.
    }
});

当然,您需要使用依赖注入包含$firebaseObject$firebaseAuth