簡體   English   中英

Angularjs我應該從Firebase返回$ rootScope數據嗎?

[英]Angularjs should I $rootScope data returned from firebase?

假設我要從Firebase檢索用戶信息,並且此用戶信息將顯示在多個路由/控制器中

我應該$rootScope返回的用戶信息嗎?

要么

在每個控制器中調用以下代碼?

firebaseAuth.firebaseRef.child('/people/' + user.id).on('value', function(snapshot) {
  $scope.user = snapshot.val();
})

UPDATE

我有一個帶有getUserInfo()函數的以下服務,那么在幾個控制器中使用它的最佳方法是什么? 在每個控制器中調用firebaseAuth.getUserInfo().then() 如果用戶數據我必須在幾個控制器中使用。 我為什么不將其設置為$rootScope 因此,我不需要在不同的控制器中一次又一次地調用它。

myapp.service('firebaseAuth', ['$rootScope', 'angularFire', function($rootScope, angularFire) {
  this.firebaseRef = new Firebase("https://test.firebaseio.com");
  this.getUserInfo = function(id) {
    var userRef = this.firebaseRef.child('/human/' + id);
    var promise = angularFire(userRef, $rootScope, 'user', {});
    return promise;
  }
});

我建議創建一個服務來執行身份驗證並存儲用戶數據。 然后,您可以將服務注入需要訪問用戶的任何控制器中。

AngularFire的重點是始終保持您的JavaScript數據模型與Firebase同步。 您不想每次需要獲取數據時都創建新的AngularFire Promise。 您只需初始化一次AngularFire,您的本地數據將始終是最新的。

myapp.service('firebaseAuth', ['angularFireCollection', function(angularFireCollection) {
    this.firebaseRef = new Firebase("https://test.firebaseio.com");
    this.initUserInfo = function(id) {
        if (!this.userRef) {
            this.userRef = this.firebaseRef.child('/human/' + id);
            this.userInfo = angularFireCollection(this.userRef);
        }
        else {
            // already initialized
        }
    }
}]);

請記住,服務的所有屬性(即,使用this關鍵字分配的所有內容)都可以從注入該服務的控制器中訪問。 因此,您可以執行console.log(firebaseAuth.userInfo)firebaseAuth.userRef.on('value', function(snap) { ... });

另外,您最終可能希望使用FirebaseAuthClient進行用戶身份驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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