如何挂钩到uib-popover的“ OnOpen”侦听器?

时间:2019-02-12 03:09:56

标签: angularjs angular-ui-bootstrap bootstrap-popover

上下文:我正在使用角度1和此UIB Popover控件。

由于我在弹出框模板中有一个文本字段,因此我的目标是在打开弹出框时将重点放在该文本字段上。

enter image description here

不幸的是,“ onOpen”没有弹出监听器/事件。

所以我尝试做

scope.$watch(()=>{return scope.isOpen}, (obj) ={
  // where scope.isOpen is the local var in the popover-is-open
  // expecting to write some code here to manipulate the element
  // to realise the focus operation
  // but there is no popover element yet when this is called
})

我只是想知道我还有什么选择?

谢谢

1 个答案:

答案 0 :(得分:0)

我在有关事件的文档中没有发现任何问题,并且在ui-bootstrap github上发现了此问题,表明它们不支持事件,也不打算实施它们。 https://github.com/angular-ui/bootstrap/issues/5060

如果您正在寻找使您能够访问事件的其他选项,则将实现您自己的popover指令,该指令仅包装引导程序弹出窗口。从理论上讲,它们可以起到与ui-bootstrap相同的作用,并允许您直接利用bootstrap提供的事件。

HTML

<div my-popover="Hello World" popover-title="Title" popover-shown="myCallback()">...</div>

JavaScript('my-popover.directive.js')

angular
    .module('myModule')
    .directive('myPopover', myPopover);

function myPopover() {
    return {
        scope: {
            popoverTitle: '@',
            popoverShown: '&'
        },
        restrict: 'A',
        link: function(scope, elem, attr) {
            $(elem).popover({
                title: scope.popoverTitle,
                content: attr.myPopover
            });

            $(elem).on('shown.bs.popover', function () {
                if(scope.popoverShown && typeof scope.popoverShown === 'function'){
                    scope.popoverShown();
                }
            });
        }
    };
}

类似于uib-popover,您可以通过添加其他作用域属性来添加对其他配置的支持。