Javascript 如何在会话结束后“Angular”{{variable}}消失时自动抛出消息
我有一个Angular应用程序,问题是,当{{controllername.name}}显示用户名时,在会话超时后,即使出现警告,用户仍然可以刷新屏幕,使您保持在页面上,而不返回登录页面 {{ctrlDash.userinfo.name}}在20分钟后消失。见下文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
<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;
};}]);