在一段时间后将用户重定向到特定状态

时间:2016-08-27 12:11:30

标签: angularjs session events angular-ui-router timeout

我有一个服务,它给我用户可以登录的毫秒数SecurityServices.getUserLoginDuration(),这个持续时间显示在所有页面的顶部,所以我写了一个显示此时间的指令。

<session-timeout value="60000"></session-timeout>

 <session-timeout value="$root.timeoutValue"></session-timeout>

在经过特定时间后,我使用这段代码将用户重定向到登录页面:

$scope.timeout = $scope.timeoutValue;

    $interval(decrementBySecond, 1000);

    $timeout(emitSessionTimeout, $scope.timeoutValue);

    function decrementBySecond() {
        $scope.timeout = $scope.timeout - 1000;           
    }

    function emitSessionTimeout() {
        $rootScope.$emit('SESSION_TIMEOUT');
    }

在我的应用程序的run块中,我处理SESSION_TIMEOUT这样的事件:

 app.run(handleTimeOut);

 function handleTimeout($rootScope, $state) {
        $rootScope.$on('SESSION_TIMEOUT', function () {
            $state.go('login');
        });
    }
每次状态更改都应刷新

超时值,因此指令控制器中的$scope.timeout应初始化为其初始值。我该怎么做到这一点?

1 个答案:

答案 0 :(得分:0)

我对我的指令做了一些修改,在双向数据绑定的帮助下,我得到了我想要的结果:

这是修改:

$scope.timeout = angular.copy($scope.timeoutValue);

$interval(decrementBySecond, 1000);

$timeout(emitSessionTimeout, $scope.timeout);

function decrementBySecond() {
    $scope.timeoutValue= $scope.timeoutValue- 1000;           
}

function emitSessionTimeout() {
    $rootScope.$emit('SESSION_TIMEOUT');
}

我从指令隔离范围的双向数据绑定和使用该指令的范围接收timeoutValue$rootScope.timeoutValue由每个状态转换更改,因此每个状态更改此值都会更新,并且新值反映在指令中,指令中的更改也反映在视图中。