为什么我需要刷新页面才能查看ng-show的新值

时间:2014-12-02 16:29:54

标签: angularjs firebase registration ng-show

嘿伙计们,所以我使用firebase和angular来构建一个示例应用程序。

这是注册功能

$scope.register = function (){ 
    Authentication.register($scope.user)
        .then(function(user){
            Authentication.login($scope.user);                                                      
        })
        .then(function(user){
            $timeout(function(){
                $location.path('/meetings');
            }, 5);
        })
        .catch(function(error){
            $scope.message = error.toString();
        });


} //register

此函数调用此工厂中的方法

myApp.factory('Authentication', function($firebase,
                $firebaseAuth,$location, FIREBASE_URL){

    var ref = new Firebase (FIREBASE_URL);
    var auth = $firebaseAuth(ref);      

    var myObject = {
        login : function (user){
                return auth.$authWithPassword({
                    email: user.email,
                    password: user.password
                });
        }, // login

        logout: function (){
            return auth.$unauth();
        },
        register : function (user){
            return auth.$createUser(user.email,user.password);
        } //register
    } //myObject
    return myObject;
});

这里是status.js控制器,它根据用户是否登录来更改我的索引

auth.$onAuth(function(authData){
        if (authData){
            console.log("i entered authData");
            $scope.userStatus = authData.password.email;

        } else {

            $scope.userStatus = false;
        }
    });

index.html文件的一部分

<div class="userinfo" 
ng-controller="StatusController"  ng-show="userStatus">
  <span class="user">Hi {{userStatus}}</span>
  <a href="#" ng-click="logout()">Log Out</a>
 </div>

我的问题是ng-view需要页面刷新才能显示新值。它没有自动显示,但我的代码工作。如果我手动刷新页面,我可以看到用户已注册并登录。

现在搜索大约2个小时和$ scope。$ apply似乎就是这种情况。

提前谢谢

1 个答案:

答案 0 :(得分:0)

我想感谢你们可能的解决方案,但似乎解决方案在于$ timeout变量。

由于下面的注册功能与API进行对话,并且我使用GulpJS在本地环境中工作,因此我的脚本与Firebase API之间的讨论会有延迟。

$scope.register = function (){ 
Authentication.register($scope.user)
    .then(function(user){
        Authentication.login($scope.user);                                                      
    })
    .then(function(user){
        $timeout(function(){
            $location.path('/meetings');
        }, 5);
    })
    .catch(function(error){
        $scope.message = error.toString();
    });


} //register

这就是为什么我首先在​​那里放置一个$ timeout角度函数但是我忘了$ timeout函数输入中的数字5是以毫秒为单位,这似乎是因为我的设置(在谈话时使用本地环境) Firebase API在线)我发现如果我在重定向中使用2秒延迟,现在ng-show会自动更改,而无需手动刷新页面。

正确的代码如下:

$scope.register = function (){ 
    Authentication.register($scope.user)
        .then(function(user){
            Authentication.login($scope.user);                                                      
        })
        .then(function(user){
            $timeout(function(){
                $location.path('/meetings');
            }, 2000);
        })
        .catch(function(error){
            $scope.message = error.toString();
        });
} //register

我怀疑如果我在网络上使用我的角度应用程序,我可能会降低延迟甚至完全删除$ timeout功能。