如何根据事件隐藏bs-popover

时间:2013-05-27 16:49:24

标签: angularjs popover

我正在使用bs-popover在angularjs中点击(作为菜单)显示我的内容。但是当我在浏览器窗口中的某个位置单击时,我需要隐藏此弹出菜单。我想让它在这种类型的事件上被驳回。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您需要为此编写指令。

yourApp.directive('bndocumentclick',
 function($document,$rootScope,$timeout) {
  return {
    restrict: 'EA',
     link : function(scope, element, attrs) {
        $document.on("click", function(ev) {
           // Do stuff here to remove your popover.
        }
     }
 }
});

HTML

<body bndocumentclick>

<div bs-popover ng-click="$event.stopPropagation()">

你需要使用,因为你不想在用户点击popover内部时关闭你的popover。

答案 1 :(得分:0)

@Jay Shukla提供的解决方案并不起作用。

&#34; $ event.stopPropagation()&#34;当你在popover内点击时触发弹出窗口的元素不会阻止它关闭..如果你在popover中有一些交互,这将是一个问题。

这有效:

angular.module('yourApp')
.directive('closePopovers', function ($document, $rootScope, $timeout) {
return {
  restrict: 'EA',
  link: function (scope, element, attrs) {
    $document.on('click', function (ev) {

      var targetElem = angular.element(ev.target);

      if (targetElem.data('toggle') !== 'popover' 
      && targetElem.parents('[data-toggle="popover"]').length === 0 
      && targetElem.parents('.popover').length === 0) {

        $('.popover').each(function () {
            var $this = $(this);
            var scope = $this.scope();
            scope.$apply(function () {
              scope.$hide();
            });
          }
        );
      }
    });
  }
};
});

在你身上:

在触发弹出窗口的元素上:

<button data-toggle="popover" [other data elements here] bs-popover>Toggle popover</button>