Angularjs 绑定不适用于Angular.js和Firebase简单登录

Angularjs 绑定不适用于Angular.js和Firebase简单登录,angularjs,firebase,Angularjs,Firebase,我看到Firebase简单登录与Angular一起使用时出现一些奇怪的行为 我无法按预期绑定$scope变量。我认为成功登录后,$scope.test或$scope.test会改变,但事实并非如此。即使在登录后,它仍然保持为false。考虑到这是我的第一个角度项目,我猜这是一个简单的项目,但我已经找遍了所有地方,还没有找到答案 代码非常简单。首先是HTML: <body ng-app> <div ng-controller="LoginController">

我看到Firebase简单登录与Angular一起使用时出现一些奇怪的行为

我无法按预期绑定$scope变量。我认为成功登录后,$scope.test或$scope.test会改变,但事实并非如此。即使在登录后,它仍然保持为false。考虑到这是我的第一个角度项目,我猜这是一个简单的项目,但我已经找遍了所有地方,还没有找到答案

代码非常简单。首先是HTML:

<body ng-app>
    <div ng-controller="LoginController">
        <div ng-hide="test">
            <h1>Welcome.  Please log in.</h1>
            <p>Test is {{test}}</p>
            <label>Username</label>
            <input type="text" ng-model="username" />
            <label>Password</label>
            <input type="password" ng-model="password" />
            <button ng-click="login()">Log in</button>
        </div>
        <button ng-show="test" ng-click="logout()">Log out</button>
    </div>

    <script type='text/javascript' src='https://cdn.firebase.com/js/client/1.0.6/firebase.js'></script>
    <script type='text/javascript' src='https://cdn.firebase.com/js/simple-login/1.2.5/firebase-simple-login.js'></script>
    <script type="text/javascript" src="js/lib/angular.js"></script>
    <script type="text/javascript" src="js/controllers/LoginController.js"></script>
</body>

感谢所有能为我指出正确方向的人。

您需要使用
$scope.$apply()
让angular知道您已经更改了scope上的某些内容。在将第三方库与监视的作用域变量集成时,需要这样做

$scope.auth = new FirebaseSimpleLogin(FB, function(error, user){
    $scope.$apply(function() {
        if(error) {
            $scope.error = error;
        } else if(user) {
            // would expected binding to take effect here, but not
            $scope.user = user;
            $scope.test = true;
        } else {
            console.log("no user");
        }
    }
});

您需要使用
$scope.$apply()
让angular知道您已经更改了scope上的某些内容。在将第三方库与监视的作用域变量集成时,需要这样做

$scope.auth = new FirebaseSimpleLogin(FB, function(error, user){
    $scope.$apply(function() {
        if(error) {
            $scope.error = error;
        } else if(user) {
            // would expected binding to take effect here, but not
            $scope.user = user;
            $scope.test = true;
        } else {
            console.log("no user");
        }
    }
});

您需要使用
$scope.$apply()
让angular知道您已经更改了scope上的某些内容。在将第三方库与监视的作用域变量集成时,需要这样做

$scope.auth = new FirebaseSimpleLogin(FB, function(error, user){
    $scope.$apply(function() {
        if(error) {
            $scope.error = error;
        } else if(user) {
            // would expected binding to take effect here, but not
            $scope.user = user;
            $scope.test = true;
        } else {
            console.log("no user");
        }
    }
});

您需要使用
$scope.$apply()
让angular知道您已经更改了scope上的某些内容。在将第三方库与监视的作用域变量集成时,需要这样做

$scope.auth = new FirebaseSimpleLogin(FB, function(error, user){
    $scope.$apply(function() {
        if(error) {
            $scope.error = error;
        } else if(user) {
            // would expected binding to take effect here, but not
            $scope.user = user;
            $scope.test = true;
        } else {
            console.log("no user");
        }
    }
});

你的登录名真的被调用了吗?在您的登录方法中使用'auth'时,您可能会遇到问题,而不是$scope。您似乎没有使用AngularFire,这有助于缩小Angular和Firebase之间的差距。他们甚至有一个种子项目(ala angular seed),该项目具有可工作的登录控制器,可以进行3路数据绑定!你应该去看看。你的登录名真的被调用了吗?在您的登录方法中使用'auth'时,您可能会遇到问题,而不是$scope。您似乎没有使用AngularFire,这有助于缩小Angular和Firebase之间的差距。他们甚至有一个种子项目(ala angular seed),该项目具有可工作的登录控制器,可以进行3路数据绑定!你应该去看看。你的登录名真的被调用了吗?在您的登录方法中使用'auth'时,您可能会遇到问题,而不是$scope。您似乎没有使用AngularFire,这有助于缩小Angular和Firebase之间的差距。他们甚至有一个种子项目(ala angular seed),该项目具有可工作的登录控制器,可以进行3路数据绑定!你应该去看看。你的登录名真的被调用了吗?在您的登录方法中使用'auth'时,您可能会遇到问题,而不是$scope。您似乎没有使用AngularFire,这有助于缩小Angular和Firebase之间的差距。他们甚至有一个种子项目(ala angular seed),该项目具有可工作的登录控制器,可以进行3路数据绑定!你应该去看看。显然是一个新手的错误。这和预期的一样。谢谢Phil。我发现$timeout比$scope安全一点。$apply。特别是在Firebase中,方法有时会同步返回(即可能已经在应用范围内,这会导致错误),这显然是一个新的错误。这和预期的一样。谢谢Phil。我发现$timeout比$scope安全一点。$apply。特别是在Firebase中,方法有时会同步返回(即可能已经在应用范围内,这会导致错误),这显然是一个新的错误。这和预期的一样。谢谢Phil。我发现$timeout比$scope安全一点。$apply。特别是在Firebase中,方法有时会同步返回(即可能已经在应用范围内,这会导致错误),这显然是一个新的错误。这和预期的一样。谢谢Phil。我发现$timeout比$scope安全一点。$apply。特别是Firebase,其中方法有时会同步返回(即可能已经在应用范围内,这会导致错误)