すべてのコントローラーで「現在のユーザー ID」を利用できる確実な方法を探しています。使用: Firebase シンプルログイン: メール/パスワード認証
私の ida: 「現在のユーザー ID」を常に利用できるようにするには、コントローラーに挿入できる「ファクトリ」が必要です。
私はこのコードを思いつきました:
app.factory('User', ['angularFire',
//Get Current UserID
function(angularFire){
console.log ('FACTORY: User');
var currentUser = {};
var ReturnStr = '';
var ref = new Firebase("https://myFIREBASE.firebaseio.com/");
var authClient = new FirebaseAuthClient(ref, function (err, user) {
if (err) {
ReturnStr = 'FACTORY: User Error: ' + err;
console.log (ReturnStr);
//var User = ReturnStr;
} else if (user) {
console.log ('FACTORY: User: Login successfully:');
console.log (user);
currentUser = user;
} else {
//console.log ('-----------User: Logged Out ---------------');
ReturnStr = 'FACTORY: Logged out: Redirect to Login';
console.log (ReturnStr);
window.location.href = "/login.php";
}
});
return currentUser;
}
]);
私の最も単純なコントローラーは次のようになります。
function ToDoCtrl($scope, User) {
$scope.MyUser = User;
$scope.MyUser.test = 'Test';
}
HTML(角度部分)には次のものがあります:
<h2>{{MyUser.id}}</h2>
<h2>{{MyUser.email}}</h2>
<h2>{{MyUser.provider}}</h2>
<h2>{{MyUser.test}}</h2>
=> ID、電子メール、プロバイダーは「未定義」です。コンソールに「FACTORY: User: Login successfully:」と表示され、正しいユーザー - オブジェクトが表示されます。
=> データの問題の非同期ロード?
私も実験しました(運が悪い):
$timeout(function () {
currentUser = user;
}
このような FACTORY は非常に便利です。私を正しい方向に向けてくれてありがとう!
編集 1.1: 今、$rootscope ハックで
=> 同じ効果 - mycontroller が速すぎる - 工場出荷時から遅い。
app.factory('User', ['$rootScope', '$timeout', 'angularFire',
//Aktueller Benutzer auslesen
function($rootScope, $timeout, angularFire){
console.log ('FACTORY: User');
var currentUser = {};
var ReturnStr = '';
var ref = new Firebase("https://openpsychotherapy.firebaseio.com/");
var authClient = new FirebaseAuthClient(ref, function (err, user) {
if (err) {
ReturnStr = 'FACTORY: User Error: ' + err;
console.log (ReturnStr);
//var User = ReturnStr;
} else if (user) {
console.log ('FACTORY: User: Login successfully:');
//currentUser = user;
$timeout(function () {
ReturnStr = 'FACTORY: Inside timout';
console.log (ReturnStr);
currentUser = user;
console.log (currentUser);
$rootScope.myUser = user;
$rootScope.myUserID = user.id;
$rootScope.loggedIn = true;
$rootScope.$apply();
return currentUser;
});
} else {
//console.log ('-----------User: Logged Out ---------------');
ReturnStr = 'FACTORY: Logged out: Redirect to Login';
console.log (ReturnStr);
//var User = ReturnStr;
window.location.href = "/login.php";
}
});
return currentUser;
}
]);
役立つ提案があればTAHNKS!他の人がこれをどのように解決するのか疑問に思います!