Я смотрел на этот код последние 45 минут и был в тупике. Я выбрал тонну console.logs в коде, и похоже, что все работает так, как я его написал, но не работает в браузере.
В основном я использую ng-idle для подписывания пользователя после истечения срока действия сеанса. Когда они выйдут из системы, появится модальный текст, в котором говорится: "Вы были выведены из-под бездействия". $ Modal.open для этого завернут внутри условного.
Этот модальный появляется при первом выгрузке пользователя, но в следующий раз после его появления, даже если вы посмотрите на console.log, он фактически находится внутри оператора if, содержащего $ modal.open. Здесь html (сомневаюсь, что это очень полезно, но вы никогда не знаете) и код:
<div class="modal-dialog session-timeout">
<h3 style="text-align: center;">You have been logged out due to inactivity.</h3>
<button type="button" class="btn btn-primary" style="margin: auto;">OK</button>
</div>
angular.module('app').run(function($rootScope, $state, $modal, Api, User, Cache) {
$rootScope.$on('IdleTimeout', function() {
console.log('DING!!!!!!')
var timedOut = false;
console.log('line 98', timedOut);
return Api.get('/users/logout').then(function (response) {
console.log('INSIDE RETURN');
Api.setupHeader('');
_.each(Object.keys(localStorage), function (key, value) {
Cache.removeItem(key);
User.currentUser = null;
$rootScope.$broadcast('sign-out');
});
console.log('line 107', timedOut);
timedOut = true;
console.log('line 109 ', timedOut);
if(timedOut === true) {
console.log('INSIDE IF');
$modal.open({
templateUrl: 'logged-out.html',
windowClass: 'session-timeout'
});
}
$rootScope.isLogin = false;
$state.go('home.home-index');
timedOut = false;
});
});
});
Я не знаком с Angular, но знаю, что если вы попытаетесь открыть bootstrap modal, это не сработает, если содержащий div div каким-то образом исчезнет. Вы уверены, что ваш взгляд не является повторным рендерингом, и поэтому div, который, по вашему мнению, не существует?