1

firebase からユーザー情報を取得したいとします。このユーザー情報は複数のルート/コントローラーに表示されます。

$rootScope返されたユーザー情報は必要ですか?

また

各コントローラーで以下のコードを呼び出しますか?

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

アップデート

関数を使用して次のサービスがあります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;
  }
});
4

2 に答える 2

1

AngularFire のポイントは、JavaScript データ モデルを常に Firebase と同期させることです。データを取得する必要があるたびに、新しい AngularFire promise を作成する必要はありません。AngularFire を 1 回初期化するだけで、ローカル データは常に最新の状態になります。

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を使用したくなるかもしれません。

于 2013-06-10T17:42:43.260 に答える
1

認証を実行し、ユーザー データを保存するサービスを作成することをお勧めします。次に、ユーザーへのアクセスが必要な任意のコントローラーにサービスを挿入できます。

于 2013-06-10T14:53:20.060 に答える