現在、私は、angelfireを使用してユーザーのログイン/ログアウト状態を追跡する認証システムを持っています。私が見ているガイドでは、すべてのコントローラで$ onAuthStateChangedを使用することを提案しています。
$rootScope.authObj.$onAuthStateChanged(function(firebaseUser) {
if (firebaseUser) {
console.log("Signed in as:", firebaseUser.uid);
});
} else {
console.log("Signed out");
}
});
代わりに、現在ログインしているユーザーを追跡するために$ rootScope.session変数を使用しています。これは大部分ではうまくいくが、オブジェクトがその時点でインスタンス化されていないので、他のコントローラの開始時にこのセッション変数にアクセスすることはできない。コントローラのスコープ内でこのセッション変数にアクセスするためのきれいな方法があるので、(それぞれの関数がセッション変数が設定された後に呼び出されるので)各関数のデータベースへの新しい参照を作成する必要はありません。
物事をもう少し明確にする。
ref = firebase.database().ref("users/" + $rootScope.session.id + '/meetings');
list = $firebaseArray(ref);
$ rootScope.session.idはまだ設定されていないため、コントローラの上部に表示されません。
しかし
$scope.addMeeting = function() {
ref = firebase.database().ref("users/" + $rootScope.session.id + '/meetings');
list = $firebaseArray(ref);
list.$add({
name: $scope.meetingname,
date: firebase.database.ServerValue.TIMESTAMP
});
};
ボタンがクリックされたときに呼び出される関数として機能します。これは、ページが既に読み込まれた後になるため、その時点で$ rootScope.session.idが設定されます。
-------------私が提案firebasesを使用して動作するようにそれを得ているアップデート-----------------
方法論、しかしそれはかなり見えません。 firebaseのAuthオブジェクトのリスナー内にすべてをネストし、if文を使用してユーザオブジェクトがnullでないことを確認します。それはあなたがあなたのページを更新するたびにクリーンアップされますので、
myApp.controller('MeetingsController', ['$scope', '$rootScope', '$firebaseAuth', '$firebaseArray', function($scope, $rootScope, $firebaseAuth, $firebaseArray){
var authObj = $firebaseAuth();
authObj.$onAuthStateChanged(function(firebaseUser) {
if (firebaseUser) {
var ref = firebase.database().ref("users/" + firebaseUser.uid + '/meetings');
var meetings = $firebaseArray(ref);
$scope.addMeeting = function() {
meetings.$add({
name: $scope.meetingname,
date: firebase.database.ServerValue.TIMESTAMP
});
};
$scope.deleteMeeting = function(key) {
meetings.$remove(meetings.$getRecord(key)).then(function(ref) {
})
.catch(function(error){
console.log(error);
});
};
}
}); //onAuthStateChange
}]);
おかげで、私はこれを試してみますよ! – user3225440