2015-06-23 4 views
1

ng-idle - это настраиваемая угловая директива, которая может быть найдена here, что позволяет вашему угловому приложению проверять, свободен ли пользователь.Доступ к переменным области видимости при использовании ng-idle

Кто-нибудь, кто использовал эту директиву, прежде чем знать, есть ли проблемы с $scope при редактировании свойств директивы?

Вот мои JS:

// include the `ngIdle` module 
var app = angular.module('demo', ['ngIdle', 'ui.bootstrap']); 

app 
.controller('EventsCtrl', function($scope, Idle, $modal) { 
    $scope.logIn = function(){ 
     $scope.loggedIn = true; 
     Idle.watch(); 
    }; 

    $scope.logOut = function(){ 
     $scope.loggedIn = false; 
     Idle.unwatch(); 
    }; 

    $scope.events = []; 

    $scope.$on('IdleStart', function() { 
     $scope.amIdle = true; 
    }); 

    $scope.$on('IdleWarn', function(e, countdown) { 
     // follows after the IdleStart event, but includes a countdown until the user is considered timed out 
     // the countdown arg is the number of seconds remaining until then. 
     // you can change the title or display a warning dialog from here. 
     // you can let them resume their session by calling Idle.watch() 
    }); 

    $scope.$on('IdleTimeout', function() { 
     // the user has timed out (meaning idleDuration + timeout has passed without any activity) 
     // this is where you'd log them 
     $scope.loggedIn = false; 
     $scope.amIdle = false; 
     Idle.unwatch(); 
     console.log("Timeout has been reached"); 
     console.log($scope.loggedIn); 
    }); 

    $scope.$on('IdleEnd', function() { 
     // the user has come back from AFK and is doing stuff. if you are warning them, you can use this to hide the dialog 
     $scope.amIdle = false; 
    }); 

    /*$scope.$on('Keepalive', function() { 
     $scope.amIdle = false; 
    });*/ 

}) 
.config(function(IdleProvider, KeepaliveProvider) { 
    // configure Idle settings 
    IdleProvider.idle(5); // in seconds 
    IdleProvider.timeout(5); // in seconds 
    KeepaliveProvider.interval(1); // in seconds 
}) 

Вход/выход вещи только основной материал, который контролирует переменную LoggedIn, которая используется только с нг-шоу, чтобы иметь очень простой экран входа в систему, чтобы проверить время ожидания ng-idle. Переход в режим ожидания/обнаружение того, вернулся ли пользователь, работает очень хорошо, единственная проблема связана с функцией $scope.$on('IdleTimeout').

Программа переходит в консольный журнал и говорит, что оба входа в систему являются ложными, и этот тайм-аут запущен, но приложение не обновляется соответствующим образом. Когда logout является ложным, пользователь должен быть возвращен на экран входа в систему, который работает, когда пользователь нажимает кнопку выхода, но не в этом случае, когда время ожидания.

ответ

0

Похоже, проблема заключалась в том, что по какой-либо причине приложение не обновлялось после изменения переменной. Это было зафиксировано добавлением

$scope.$apply(); 

После того, как в функции IdleTimeout установлено значение false, значение false.

Смежные вопросы