![](/img/trans.png)
[英]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.