Подтвердить что ты не робот

Angular Событие закрытия модального диалогового окна UI Bootstrap

Как определить, когда модальный диалог Angular UI Bootstrap закрыт?

Мне нужно знать, когда диалоговое окно закрывается, поэтому я могу транслировать событие loginCancelled, используя библиотеку angular-http-auth, чтобы пользовательский интерфейс Angular не висел, особенно после закрытия модальности, щелкнув по фону.

4b9b3361

Ответ 1

Это работает для щелчка по фону и нажатия клавиши esc, если вы выбираете это.

var modalInstance = $modal.open({
    templateUrl: '/app/yourtemplate.html',
    controller: ModalInstanceCtrl,
    windowClass: 'modal',
    keyboard: true,
    resolve: {
        yourResulst: function () {
            return 'foo';
        }
    }
});

var ModalInstanceCtrl = function ($scope, $modalInstance, yourResulst) {

    var constructor = function () {
       // init stuff
    }

    constructor();

    $modalInstance.result.then(function () {
        // not called... at least for me
    }, function () {
        // hit here... clean up or do whatever
    });

    // VVVV other $scope functions and so on...

};

ОБНОВЛЕНИЕ: альтернативный подход

Я понятия не имею, почему этот способ не документирован на http://angular-ui.github.io/bootstrap/... но я нахожу его намного лучше. Теперь вы можете использовать этот контроллер страницы или использовать определенный контроллер с контроллером в качестве синтаксиса. Вы могли бы даже использовать ng-include для содержимого модального, если хотите разделить на html. Следующие действия без JS, необходимые в контроллере для установки/настройки модального, если у вас есть bootstrap/bootstrapUI, включенный в ваш проект/сайт

<div class="row">

    <button class="btn btn-default" data-toggle="modal" data-target="#exampleModal">Open Example Modal</button>

</div>

<div class="modal fade" id="exampleModal" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">Close</button>
                <h2 class="modal-title" id="exampleModalLabel">Modal Example</h2>
            </div>
            <div class="modal-body" style="padding-bottom:0px;">

                <h3>model markup goes here</h3>

            </div>
        </div>
    </div>
</div>

Ответ 2

Я закончил со следующим кодом:

$modal.open(modalOptions).result.finally(function(){
  console.log('modal has closed');
});

Таким образом, вы можете избежать метода then()

Ответ 3

Это сработало для меня:

var modalInstance = $modal.open({...});
        modalInstance.result.then(function () {
            //something to do on close
        });