つまりね...
私は AngularJS を使用しており、firebird の facebook connect を使用していくつかのことを試しています。
すべてがほぼ問題なく、Facebook に接続され、アカウントの情報が返されますが、Angular を使用しているため、ng-show と ng-hide を使用して接続を表示および非表示にしますボタンですよね?
だから私はそのような構造を持っています:
<div ng-controller="LoginCtrl">
<div ng-hide="logedUser">
<a href="" ng-click="loginFacebook()">Login with Facebook</a>
<a href="" ng-click="checkAuth()">check</a>
</div>
<div ng-show="logedUser">
<a href="" ng-click="logout()">Logout</a>
</div>
</div>
logedUser は、ユーザーがログに記録されているかどうかを検証するため、true または false で、一方の div を表示し、もう一方を非表示にします。
問題は、角度コントローラーを考えてこの変数を更新しようとしたときです。コードは次のとおりです。
app.controller('LoginCtrl', function($scope) {
$scope.loginFacebook = function() {
auth.login('facebook', {
rememberMe: true,
scope: 'email,user_likes'
});
};
$scope.logout = function() {
auth.logout();
};
$scope.checkAuth = function() {
console.log($scope);
};
var loginRef = new Firebase('https://angulartodolist.firebaseIO.com/');
var auth = new FirebaseSimpleLogin(loginRef, function(error, user) {
if (error) {
// an error occurred while attempting login
console.log(error);
$scope.logedUser = false;
} else if (user) {
// user authenticated with Firebase
console.log(user);
$scope.logedUser = true;
} else {
// user is logged out
$scope.logedUser = false;
}
}); });
何が起こっているのか、ログインをクリックすると、loginFacebook() 関数が呼び出され、認証され、ユーザー情報が返されます。その後、$scope.logedUser = true; を使用して、logedUser 変数を true に変更します。
しかし、私のフロントエンドではdivを変更していないので、コントローラーにアクセスするためだけにcheckAuth()という関数を作成し、単純なconsole.logを作成しました。その関数を実行した後、divを変更してログインを作成しますdivが消え、ログアウトdivが表示されます...
Firebase のコールバックで変数を設定するだけで自動的に発生するはずではありませんか?