Попытка запустить функцию внутри контроллера angular после закрытия модального окна начальной загрузки

Я в основном пытаюсь понять, как сделать определенный прослушиватель событий в контроллере angular. В частности, когда модальный бутстрап закрывается, я хотел бы запустить функцию в контроллере angular. В jquery вы обычно можете сделать что-то вроде:

$(.some-class).on('click', function() {
   // do something
});

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

Я использую:

<a type="button" data-toggle="modal" data-target="#overview" ng-click="launchOverview()">
    <img ng-src="{{ sideNavActive.overviewSrc }}" /><br />
  </a>

и у меня есть объект в моем контроллере:

$scope.sideNavActive = {
        "overviewSrc": "img/side-nav/tab-overview-off.png",
        "detailsSrc": "img/side-nav/tab-details-off.png",
        "contactSrc": "img/side-nav/tab-contact-off.png"
}

Когда пользователь нажимает одну из боковых кнопок навигации, у меня есть функция ng-click, которая изменяет кнопку на «img/...-on.png», поэтому кнопка становится красной (активной). Когда пользователь нажимает другую кнопку боковой навигации, эта кнопка становится красной, а остальные — серыми.

То, что я пытаюсь сделать, это когда пользователь щелкает в выцветшей области вокруг модального окна, чтобы закрыть его, я также хочу, чтобы все кнопки были сброшены до серого. Согласно документации начальной загрузки, я должен иметь возможность запускать функцию в событии «hidden.bs.modal», но я не могу заставить ее работать в моем угловом контроллере. У меня есть следующая функция, где «#overview» — это мой идентификатор для моего модального окна.

$('#overview').on('hidden.bs.modal', function() {
        console.log('function fired!!!!!????');
        $scope.sideNavActive = {
          "overviewSrc": "img/side-nav/tab-overview-off.png",
          "detailsSrc": "img/side-nav/tab-details-off.png",
          "contactSrc": "img/side-nav/tab-contact-off.png"
        }
      })

Однако эта функция не срабатывает, когда модальное окно закрывается, и я не могу понять, почему.

Одна вещь, которую я сделал, чтобы увидеть, действительно ли функция слушает, изменила ее на:

$('body').on('click', function() {
  // function code here
}

и это работает. Он срабатывает всякий раз, когда я нажимаю в любом месте, так как он прослушивает элемент «тело». Итак, я знаю, что он прослушивает, но по какой-то причине событие «hidden.bs.modal» не работает.


person Darryl Mendonez    schedule 04.04.2017    source источник
comment
не смешивайте jquery с angular   -  person Akashii    schedule 04.04.2017
comment
@ThanhTùng Как я могу преобразовать его в угловой? Я сделал: angular.element('#overview').on('hidden.bs.modal', function() { console.log('function fired!!!!!????'); $scope.sideNavActive = { "overviewSrc": "img/side-nav/tab-overview-off.png", "detailsSrc": "img/side-nav/tab-details-off.png", "contactSrc": "img/side-nav/tab-contact-off.png" } }) и это все равно не сработало.   -  person Darryl Mendonez    schedule 04.04.2017
comment
вы пытаетесь использовать $scope.launchOverview = function(){}   -  person Akashii    schedule 04.04.2017


Ответы (2)


Я бы использовал модальное окно angular-ui-bootstrap, если вы еще этого не сделали: http://angular-ui.github.io/bootstrap/#!#modal. В модальном экземпляре есть функция обратного вызова, которая выполняется при закрытии модального окна:

modalInstance.result.then(function (someObj) {
      // success 
    }, function () {
      // this code will be executed when the modal is dismissed
      console.log('Modal dismissed at: ' + new Date());
    });
person kennypowers    schedule 04.04.2017

Выяснил, как запустить функцию в угловом контроллере, когда модальный режим закрыт.

angular.element(document).find('.modal').on('hidden.bs.modal', function(){
  // do something
  console.log('function fired');
});
person Darryl Mendonez    schedule 05.04.2017