我有一个服务,它给我用户可以登录的毫秒数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
应初始化为其初始值。我该怎么做到这一点?
答案 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
由每个状态转换更改,因此每个状态更改此值都会更新,并且新值反映在指令中,指令中的更改也反映在视图中。