Javascript 如何在会话结束后“Angular”{{variable}}消失时自动抛出消息

Javascript 如何在会话结束后“Angular”{{variable}}消失时自动抛出消息,javascript,angularjs,ng-idle,Javascript,Angularjs,Ng Idle,我有一个Angular应用程序,问题是,当{{controllername.name}}显示用户名时,在会话超时后,即使出现警告,用户仍然可以刷新屏幕,使您保持在页面上,而不返回登录页面 {{ctrlDash.userinfo.name}}在20分钟后消失。见下文 <ul class='nav'> <li class='dropdown dark user-menu'> <a class='dropdown-toggle' data-togg

我有一个Angular应用程序,问题是,当{{controllername.name}}显示用户名时,在会话超时后,即使出现警告,用户仍然可以刷新屏幕,使您保持在页面上,而不返回登录页面

{{ctrlDash.userinfo.name}}在20分钟后消失。见下文

<ul class='nav'>
    <li class='dropdown dark user-menu'>
        <a class='dropdown-toggle' data-toggle='dropdown' href='#'>
            <img width="23" height="23" alt="" src="assets/images/avatar.jpg" />
            <span class='user-name'>{{ctrlDash.userInfo.name}}</span>
            <b class='caret'></b>
        </a>
        <ul class='dropdown-menu'>
            <li>
                <a href='user_profile.html'>
                    <i class='icon-user'></i>
                    Profile
                </a>
            </li>
            <li>
                <a href='user_profile.html'>
                    <i class='icon-cog'></i>
                    Settings
                </a>
            </li>
            <li class='divider'></li>
            <li>
                <a href='sign_in.html' target="_self">
                    <i class='icon-signout'></i>
                    Sign out
                </a>
            </li>
        </ul>
    </li>
</ul>
首先计时器检测到空闲,然后弹出警告,告诉用户,哦,您需要登录。但是,当我点击refresh时,它会刷新页面,但是{{ctrlDash.userInfo.name}现在是空的

这是ngile的代码

//This is the IDLE function
            $scope.started = false;
            $scope.ended = false;

            $scope.events = [];
            $scope.idle = 20; //this is in ACTUAL seconds
            $scope.timeout = 20; //this is in ACTUAL seconds

            function closeModals() {
                if ($scope.warning) {
                    $scope.warning.close();
                    $scope.warning = null;
                }

                if ($scope.timedout) {
                    $scope.timedout.close();
                    $scope.timedout = null;
                }
            }

            $scope.$on('IdleStart', function () {
                closeModals();

                $scope.warning = $modal.open({
                    templateUrl: 'warning-dialog.html',
                    windowClass: 'modal-danger'
                });
            });

            $scope.$on('IdleEnd', function () {
                closeModals();
            });

            $scope.$on('IdleTimeout', function () {
                closeModals();
                $scope.timedout = $modal.open({
                    templateUrl: 'timedout-dialog.html',
                    windowClass: 'modal-danger'
                });
            });

            $scope.start = function () {
                closeModals();
                Idle.watch();
                $scope.started = true;
            };

            $scope.stop = function () {
                closeModals();
                Idle.unwatch();
                $scope.started = false;

            };
            if(!angular.isDefined($scope.goBack)) {

                console.log("I\'m not defined...");

                if(!angular.isFunction($scope.goBack)) {

                    console.log("I\'m not a function...")
                }
            }

            $scope.goBack = function _goBack() {
                closeModals();
                Idle.unwatch();
                $window.location.href = $scope.templateViews.logout;
            };
最后:controller=dashboardController中的goBack函数抛出一个错误

未引用错误,未定义goBack


这些是我的问题。我很乐意帮忙。谢谢大家。

我正在开发我的第一款angular应用程序,所以无论如何都不是高手。。我实现了注销功能。当用户在注销后尝试转到任何页面时,控制器会检查是否存在凭据,如果没有凭据,则会将凭据发送回登录页面,其中包含:

`$location.path('/login');`
-根据评论更新

我有两个工厂服务模块。1-与REST端点通信,2-处理我所有的业务事务。当用户登录成功时,我将用户信息传递给setCreds函数

var businessService = angular.module('businessService, ['ngCookies' ]);
businessService.factory('setCreds', ['$cookies', function ($cookies) {
    return function(un, pw, userRole) {
        var token = un.concat(":", pw);
        $cookies.creds = token;
        $cookies.usersRole = userRole;
然后,在获取视图所需的任何信息之前,我检查所有控制器的第一件事是checkCreds

if (!checkCreds()) {       
    $location.path('/login');
} else { ..proceed with getting stuff
我的支票看起来像:

businessService.factory('checkCreds', ['$cookies', function ($cookies) {
    return function () {
        var returnVal = false;
        var creds = $cookies.creds;
        if (creds !== undefined && creds !== "") {
            returnVal = true;
        }
        return returnVal;
    };}]);

确保将业务服务注入应用程序,并将要使用的服务工厂注入控制器。

Tonia,谢谢。现在我要问你,你有没有更多的代码来显示你是如何检查状态凭证的?我的问题是我有一个登录屏幕,去SPA单页应用程序,仪表板和其他东西。。。。因此,当会话超时时,{dashCtrl.userInfo.name}}消失,页面上的名称消失,因此,我只需要检查$scope.userInfo.name的有效性
businessService.factory('checkCreds', ['$cookies', function ($cookies) {
    return function () {
        var returnVal = false;
        var creds = $cookies.creds;
        if (creds !== undefined && creds !== "") {
            returnVal = true;
        }
        return returnVal;
    };}]);