Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止浏览器返回ui路由器-angularjs_Angularjs_Angular Ui Router - Fatal编程技术网

停止浏览器返回ui路由器-angularjs

停止浏览器返回ui路由器-angularjs,angularjs,angular-ui-router,Angularjs,Angular Ui Router,一旦我登录到应用程序中,若我在浏览器中单击“后退”按钮,它将不会再次返回到登录页面(此时“后退”按钮应禁用) 从登录页面,我进入app.home状态,一旦我点击后退按钮,它就不应该进入登录页面(浏览器后退按钮应该是禁用的) 提前感谢。我认为您必须处理一些基本路线和存储实施 将此结构作为身份验证的简单示例: 我们有主URL,默认的,我们有一个登录页面和一个秘密页面 // Route configuration var Config = function($stateProvider

一旦我登录到应用程序中,若我在浏览器中单击“后退”按钮,它将不会再次返回到登录页面(此时“后退”按钮应禁用)

从登录页面,我进入app.home状态,一旦我点击后退按钮,它就不应该进入登录页面(浏览器后退按钮应该是禁用的)


提前感谢。

我认为您必须处理一些基本路线和存储实施

将此结构作为身份验证的简单示例: 我们有主URL,默认的,我们有一个登录页面和一个秘密页面

    // Route configuration
    var Config = function($stateProvider, $urlRouterProvider){

        $stateProvider

        .state('home', {
            url : '/',
            templateUrl : 'home.html'
        })
        .state('login', {
            url : '/login',
            controller : 'LoginCtrl',
            templateUrl : 'login.html'
        })
        .state('secret', {
            url : '/secret',
            templateUrl : 'secret.html',
            authenticate : true
        })

        $urlRouterProvider.otherwise("/");

    };

    // Dependencie injection
    Config.$inject = [
        '$stateProvider',
        '$urlRouterProvider'
    ];

    // Module declaration
    app.config(Config);
机密页仅对经过身份验证的用户可用,因此您在状态本身中放置了一个参数,以指示此页需要某种身份验证

要处理身份验证过程,如重定向,可以创建一个运行函数,该函数将有一个事件,监听状态更改

如果您将访问需要验证的页面,您将检查该页面并将用户重定向到登录页面

如果用户已经登录并尝试手动转到登录页面,则您会将其重定向到主页,可能会显示一条反馈消息

    // Initialize the application
    var Init = function($rootScope, $state){

        $rootScope.$on('$stateChangeStart', function (event, toState, toParams) {

            var isLogged = localStorage.getItem('auth');

            if(toState.authenticate && isLogged === null){

                event.preventDefault();

                // Set the url where you will redirect the user after the authentication
                $rootScope.returnToState = toState.name;

                // Redirect to the login page
                $state.go('login');    

            } 

            if(isLogged && toState.name === 'login'){

                event.preventDefault();

                // Redirect to the homepage if the page is the login and
                // you are already logged in
                $state.go('home');

            }

        });

    };

    // Dependencie injection
    Init.$inject = [
        '$rootScope',
        '$state'
    ];

    // Module declaration
    app.run(Init);
登录控制器在这里非常简单,但是您可以做任何您想提供身份验证的事情,并保存您需要的所有参数

    // Login Controller
    var LoginCtrl = function($scope, $rootScope, $state){

        // Share methods
        $scope.authenticate = function(){

            // Do whatever you want to validate credentials

            localStorage.setItem('auth', true);

            var redirectPath = angular.isUndefined($rootScope.returnToState) ? 'home' : $rootScope.returnToState;

            $state.go(redirectPath);

        };

    };

    // Dependencie injection
    LoginCtrl.$inject = [
        '$scope',
        '$rootScope',
        '$state'
    ];

    // Module declaration
    app.controller('LoginCtrl', LoginCtrl);

您不能禁用浏览器按钮,但如果用户将其重定向到主页,您可以在登录控制器中检查用户是否已登录。如果单击“注销”,该怎么办?,当时我们需要重定向到登录页面knw…我们如何区分浏览器后退按钮单击和注销按钮单击?我不明白你的意思,我想你还没有清除通用的身份验证机制。
    // Login Controller
    var LoginCtrl = function($scope, $rootScope, $state){

        // Share methods
        $scope.authenticate = function(){

            // Do whatever you want to validate credentials

            localStorage.setItem('auth', true);

            var redirectPath = angular.isUndefined($rootScope.returnToState) ? 'home' : $rootScope.returnToState;

            $state.go(redirectPath);

        };

    };

    // Dependencie injection
    LoginCtrl.$inject = [
        '$scope',
        '$rootScope',
        '$state'
    ];

    // Module declaration
    app.controller('LoginCtrl', LoginCtrl);