0

事情是这样的……

我正在使用 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 验证用户是否登录,因此它的真假,使一个 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() 函数,它进行身份验证,然后返回我的用户信息,之后,我将 logedUser 变量更改为 true,使用 $scope.logedUser = true;

但是在我的前端它没有改变 div,所以我创建了一个名为 checkAuth() 的函数,只是为了访问控制器,并制作一个简单的 console.log,在我执行该函数后,它会更改 div,进行登录div 消失,注销 div 出现...

它不应该通过在 Firebase 的回调中设置变量来自动发生吗?

4

1 回答 1

1

添加

$scope.$apply()

在 FirebaseSimpleLogin 回调函数中:)

通常,“角度世界”之外的每个回调都需要它来刷新其范围。

于 2013-08-14T22:17:55.377 回答