在AngularJS中成功登录而无需刷新后无法显示注销

时间:2017-04-05 09:41:34

标签: angularjs

成功登录后,在标题部分中看不到注销按钮,但是当我刷新页面时它会变得可见,之后我可以删除cookie。如何在不刷新页面的情况下使其工作?这是AngularJS中的单页应用程序。

的index.html

<div class="container" ng-controller="loginController">
    <div class="row">
        <ul class="top-bar-link top-bar-link-left">
            <li><i class="fa fa-phone"></i> Call us: 090 456 7823</li>
            <li><i class="fa fa-exchange"></i> 30 Days Exchange Policy</li>
        </ul>
        <ul class="top-bar-link top-bar-link-right dot">                    
            <li><a href="#checkout" >Checkout</a></li>
            <li><a href="#compare">Compare</a></li>
            <li><a href="#sign_up" ng-show="!isauthentication">Sign up</a></li>
            <li><a href="#login" ng-show="!isauthentication">Login</a></li>
            <li><a href="" ng-show="isauthentication" ng-click="logout()" >Logout</a></li>                      
        </ul>
    </div>
</div>

logincontroller.js

app.controller('loginController', [
    '$scope',
    '$location',
    'datafactory',
    '$cookieStore',
    function($scope, $location, datafactory, $cookieStore) {
        var keycookie;
        $scope.status;
        $scope.customers;

        $scope.isauthentication = false;
        init();
        function init() {
            if ($cookieStore.get('keycookie') != null) {

                $scope.isauthentication = true;

                console.log("print");
            } else {

                $scope.isauthentication = false;

                console.log("falseprint");
            }

        }

        $scope.login = function() {
            datafactory.postLogin($scope.email, $scope.password).then(
                    function(response) {
                        if (response.data.success == true) {

                            $cookieStore.put('keycookie',response.data.key);
                            $cookieStore.put('emailcookie',$scope.email);
                            var keycookie = $cookieStore.get('keycookie');
                            console.log(keycookie);
                            var emailcookie = $cookieStore.get('emailcookie');
                            console.log(emailcookie);
                            init();
                            console.log("login success");

                            $location.path("/home");

                        }
                    }, function(error) {
                        window.location.href = "#/login";
                    });
        }
        $scope.logout = function() {

            if ($cookieStore.get('keycookie') != null) {
                $cookieStore.remove('keycookie');
                init();
            }
            init();
        }
    } ]);

1 个答案:

答案 0 :(得分:0)

试试这个:

 function init() {
 $timeout(function() {
     if ($cookieStore.get('keycookie') != null) {

         $scope.isauthentication = true;

         console.log("print");
     } else {

         $scope.isauthentication = false;

         console.log("falseprint");
     }
 });
}

这将等待任何现有的摘要周期完成,然后触发一个新的,以便使用最新值更新当前作用域。

也试试这个:

$timeout(function() {
     $location.path("/home");
 });