[英]Angularjs should I $rootScope data returned from firebase?
[英]angularjs rootscope user database info from firebase
我试图从用户的数据库中获取用户信息,并使用rootscope从任何地方访问它。
当用户登录时,我会收到用户的电子邮件和uid。
但是,要从数据库中获取用户信息,我需要调用数据库并逐一读取信息,并将其作为变量存储在rootscope中,以便从任何地方访问它。
所以,我的问题如下:
感谢帮助。
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.
}
});
}]);
有两种方法可以满足您的需求
方法1:
您可以这样做$rootScope.authData=user;
然后通过注入$rootScope
从任何地方访问它。 但这个问题是,当你将刷新页面$rootScope
将是空选中此SO问题
方法二:
我会更喜欢这种方法,您可以使用使用$getAuth()
的函数angularfire
, $getAuth
是syncronous功能,将让你当前的用户数据。
var myUser=$scope.AuthObj.$getAuth();
如果使用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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.