簡體   English   中英

來自firebase的angularjs rootscope用戶數據庫信息

[英]angularjs rootscope user database info from firebase

我試圖從用戶的數據庫中獲取用戶信息,並使用rootscope從任何地方訪問它。
當用戶登錄時,我會收到用戶的電子郵件和uid。
但是,要從數據庫中獲取用戶信息,我需要調用數據庫並逐一讀取信息,並將其作為變量存儲在rootscope中,以便從任何地方訪問它。

所以,我的問題如下:

  • 在此示例中,如何使用rootscope?
  • 有什么更好的方法嗎?
  • 在下面的示例中,控制台日志顯示了名字,但是我不知道如何對它進行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM