В настоящее время у меня есть система авторизации для отслеживания состояния входа/выхода пользователя с помощью углового огня. Руководство, на которое я смотрю, предполагает использование $ 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 установлен этой точкой.
------------- Update -----------------
Я получил его на работу, используя firebases предложил методология, но она не выглядит красивой. Он включает вложение всего внутри слушателя объекта Auth firebase, а затем использование оператора if для обеспечения того, чтобы объект пользователя не был нулевым.
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