Как получилось, что мой мод начальной загрузки, обернутый в условное, открывается в первый раз, но не открывается во второй раз?

0

Я смотрел на этот код последние 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;
    });
  });
});
Теги:
bootstrap-modal

1 ответ

0

Я не знаком с Angular, но знаю, что если вы попытаетесь открыть bootstrap modal, это не сработает, если содержащий div div каким-то образом исчезнет. Вы уверены, что ваш взгляд не является повторным рендерингом, и поэтому div, который, по вашему мнению, не существует?

  • 0
    Это звучит как проблема, потому что страница, на которую она перенаправляется, фактически перерисовывается после того, как вы вышли из системы. Я все еще не понимаю, почему он не будет отображаться во второй раз.
  • 0
    Это своего рода проблема с синхронизацией, поскольку условие запускается до завершения рендеринга; Я не знаю, использует ли Angular теневой DOM, но структура должна быть в DOM, прежде чем модал может сработать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню