Reputation: 522
For those of you unfamiliar, ngIdle can be found here.
It's basically a way to make an idle timeout like many banks have on their websites using angular.
It works great, however the way that I am currently using it is by placing some of the config stuff in my controller. The problem is I am working with multiple controllers and don't really want to just copy paste this config stuff throughout my project.
Here is what the config looks like:
function closeModals()
{
// Function closes any modals that are currently open (used when coming back from idle)
if ($scope.warning) {
$scope.warning.close();
$scope.warning = null;
}
if ($scope.timedout) {
$scope.timedout.close();
$scope.timedout = null;
}
}
$scope.$on('IdleStart', function () { // What happens when the user goes idle (idle time is defined in app.js IdleProvider config)
closeModals();
$scope.warning = $modal.open({
templateUrl: 'views/timeoutModal.html',
windowClass: 'modal-danger'
});
});
$scope.$on('IdleTimeout', function () { // This is what happens when the user waits passed the warning timer
logout();
closeModals();
Idle.unwatch();
$scope.$apply();
alert("You have been signed out due to inactivity.");
});
$scope.$on('IdleEnd', function () { // What happens when the user comes back from being idle but before they are timed out
closeModals();
$scope.amIdle = false;
});
Basically, I want to be able to simply tell my controller that I want to use these configuration settings and it would be able to use them without needing to put them in the controller.
Upvotes: 0
Views: 640
Reputation: 5254
You should not need this config in multiple places. Looking at NgIdle they are broadcasting the event from the $rootScope. https://github.com/HackedByChinese/ng-idle/blob/develop/angular-idle.js#L193
The only reason you would need to setup watched on different scopes because you wanted to do multiple things for a specific event.
All you need to do is in a single controller inject $rootScope and add the event watchers to that.
Upvotes: 1