Derzeit verfüge ich über ein Berechtigungssystem, um den Status des An- und Abmeldens von Benutzern mithilfe von angularfire zu verfolgen. Die Anleitung, die ich anschaue, schlägt vor, $ onAuthStateChanged in jedem Controller zu verwenden.
Stattdessen habe ich eine Variable $ rootScope.session verwendet, um den aktuell angemeldeten Benutzer zu verfolgen. Das funktioniert größtenteils gut, aber ich kann nicht auf diese Sitzungsvariable beim Start anderer Controller zugreifen, da das Objekt an diesem Punkt nicht instanziiert wird. Gibt es eine saubere Möglichkeit, auf diese Sitzungsvariable im Bereich des Controllers zuzugreifen, so dass ich nicht in jeder Funktion einen neuen Verweis auf die Datenbank machen muss (da diese Funktionen aufgerufen werden, nachdem die Sitzungsvariable gesetzt wurde).
Um die Dinge ein wenig klarer zu machen.
ref = firebase.database().ref("users/" + $rootScope.session.id + '/meetings');
list = $firebaseArray(ref);
An der Spitze meines Controllers funktioniert nicht, da $ rootScope.session.id noch nicht festgelegt ist.
Aber
$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
});
};
Funktioniert als die Funktion, die auf einen Knopfklick aufgerufen wird, der immer sein wird, nachdem die Seite bereits geladen worden ist, folglich $ rootScope.session.id wird durch diesen Punkt festgelegt.
------------- aktualisieren -----------------
ich es bekommen habe mit dem firebases zu arbeiten vorgeschlagen Methodik, aber es sieht nicht schön aus. Es beinhaltet das Verschachteln aller Objekte in einem Listener auf dem Auth-Objekt der Firebase und dann die Verwendung einer if-Anweisung, um sicherzustellen, dass das Benutzerobjekt nicht null ist.
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
}]);
Danke, ich werde es versuchen! – user3225440