Правильное решение, использующее новый атрибут popover-is-open, как указано ниже, позволяет использовать область видимости контроллера.
myPopoverCtrl, [$scope, function($scope) { // query popover $scope.myPopover = { isOpen: false, templateUrl: myPopoverTemplate.html, open: function open() { $scope.myPopover.isOpen = true; $scope.myPopover.data = Hello!; }, close: function close() { $scope.myPopover.isOpen = false; } }; } ]);
<body ng-app="ui.bootstrap.demo" class="container"> <button class="btn btn-danger" ng-controller="myPopoverCtrl" popover-template="myPopover.templateUrl" popover-title="This is a popover" popover-placement="bottom" popover-is-open="myPopover.isOpen" ng-click="myPopover.open()">Click me!</button> <script type="text/ng-template" id="myPopoverTemplate.html"> <h2 ng-bind="myPopover.data" /> <button class="btn btn-success" ng-click="myPopover.close()">Close me!</button> </script> </body>
$scope.close = function(e) { el = angular.element(e.target).closest("td"); // `td` is the parent of my clickable // element, in this case a `span` $timeout(function() { // need $timeout so we dont conflict with the digest loop el.children(":first").trigger(close); // couldnt select the `span` element directly }); },