无法使用ng-show更改登录按钮的名称 [英] Unable to change the name of login button using ng-show

查看:69
本文介绍了无法使用ng-show更改登录按钮的名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在用户登录后将布尔值设置为true,并且我想将登录按钮状态更新为注销.我尝试使用ng-show,但显然无法正常工作.

I am setting a boolean value to true after user logs in and I want to update the login button status to logout. I tried using ng-show but apparently its not working.

状态:

myApp.config(function ($stateProvider, $urlRouterProvider) {

    // default route
    $urlRouterProvider.otherwise("/Home");
    var header = {
        templateUrl: 'commonViews/Header.html',
        controller: function ($scope) {
        }

    };
    var footer = {
        templateUrl: 'commonViews/Footer.html',
        controller: function ($scope) {
        }
    };
    // ui router states
$stateProvider
    .state('Home', {
        url: "/Home",
        views: {
            header: header,
            content: {
                templateUrl: 'views/HomePage.html',
                controller: function ($scope) {
                }
            },
            footer: footer
        }
    })
    .state('LoggedIn', {
        url: "/LoggedIn",
        views: {
            'header': header,
            'content': {
                templateUrl: 'views/LoggedIn.html',
                controller: function ($scope) {
                }
            },
            'footer': footer
        }
    });
});

UserService:

UserService:

myApp.factory('UserService', function ($http, $localStorage, AuthenticationService) {
    return {
        logIn: function (email, password) {
            return $http.post('rs/loginResource/login', {email: email, password: password})
                    .then(function (data) {
                        AuthenticationService.isLogged = true;
                        alert("Authentication loggedIn inside login controller: " + AuthenticationService.isLogged);
                        return data;
                    })
                    .catch(function (error) {
                        console.log(error);
                    });
        },
        logOut: function () {
            if (AuthenticationService.isLogged) {
                AuthenticationService.isLogged = false;
                delete $localStorage.token;
            }
        }
    };
});

myApp.factory('AuthenticationService', function () {
    var auth = {
        isLogged: false
    };
    return auth;
});

登录控制器:

myApp.controller('loginController', ['$scope', '$http', 'jwtHelper', '$localStorage', '$sessionStorage', '$state', '$window', 'UserService', 'AuthenticationService', function ($scope, $http, jwtHelper, $localStorage, $sessionStorage, $state, $window, UserService, AuthenticationService)
    {
        $scope.token = "";
        $scope.$storage = $localStorage;
        $scope.loginForm = function (email, password) {

            if (email !== undefined && password !== undefined) {
                UserService.logIn(email, password).then(function (response) {
                    $localStorage.token = response.data.token;
                    if ($localStorage.token) {
                        $state.go('LoggedIn');
                        alert("scope loggedIn inside login controller: " + AuthenticationService.isLogged);
                    }
                }).catch(function (status, data) {
                    console.log(status);
                    console.log(data);
                });
            }

            $scope.logout = function logout() {
                UserService.logOut().success(function () {
                    $state.go('/');
                }).error(function (status, data) {
                    console.log(status);
                    console.log(data);
                });
            };
        };
    }]);

index.html:

index.html:

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
    <head></head>
    <body>
        <div ui-view="header"></div>
        <div ui-view="content"></div>
        <div ui-view="footer"></div>
    </body>
</html>

标题html:

<nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
        <div id="navbar" class="collapse navbar-collapse">
            <ul class="nav navbar-nav navbar-right">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" ng-show="isLoggedIn" ng-click="logout()"><b>Logout</b></a>
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" ng-show="!isLoggedIn"><b>Login</b> <span class="caret"></span></a>
                    <ul id="login-dp" class="dropdown-menu">
                        <!---------------------------------Login Controller Here------------------------------------->
                        <li>
                            <div class="row"> 
                                <div class="col-md-12">
                                    <form class="form" role="form" method="post" ng-controller="loginController" ng-submit="loginForm(email, password)" accept-charset="UTF-8" id="login-nav">
                                        <div class="form-group">
                                            <label class="sr-only" for="exampleInputEmail2">Email address</label>
                                            <input type="email" class="form-control" ng-model="email" id="exampleInputEmail2" placeholder="Email address" required>
                                        </div>
                                        <div class="form-group">
                                            <label class="sr-only" for="exampleInputPassword2">Password</label>
                                            <input type="password" class="form-control" id="exampleInputPassword2" ng-model="password" placeholder="Password" required>
                                            <div class="help-block text-right"><a href="">Forget the password ?</a></div>
                                        </div>
                                        <div class="form-group">
                                            <button type="submit" class="btn btn-primary btn-block">Sign in</button>
                                        </div>
                                    </form>
                                </div>
                            </div>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</nav>

用户登录后,它将状态更改为注销(一秒钟),然后再次返回到登录状态.我不知道怎么了?

After user is logged in, it changes the status to logout for split second and then back to login status again. I am not sure what's going wrong?

推荐答案

AuthenticationService 添加到控制器的范围,

Add AuthenticationService to the scope of your controller,

$scope.AuthenticationService = AuthenticationService;

并从视图/模板中删除 $ scope

<ul class="nav navbar-nav navbar-right" ng-controller="loginController">
<li class="dropdown">
  <a href="#" class="dropdown-toggle" data-toggle="dropdown" ng-show="AuthenticationService.isLogged" ng-click="logout()"><b>Logout</b></a>
  <a href="#" class="dropdown-toggle" data-toggle="dropdown" ng-show="!AuthenticationService.isLogged"><b>Login</b> <span class="caret"></span></a>
</li>

这篇关于无法使用ng-show更改登录按钮的名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆