要通过自定义代码使bootstrap的工具提示/ popover可以关闭,我们使用指令:
.directive('popoverToogle', ['$timeout', function($timeout) {
return {
scope: true,
link: function(scope, element, attrs) {
function trigger(element, evt) {
evt = new Event(evt);
element[0].dispatchEvent(evt);
}
scope.opened = false;
scope.togglePopover = function() {
$timeout(function() {
trigger(element, scope.opened ? 'close' : 'open');
scope.opened = !scope.opened;
});
};
scope.closePopover = function() {
$timeout(function(){
trigger(element, 'close');
scope.opened = false;
});
};
return element[0].addEventListener('click', scope.togglePopover);
}
};
它使用Changelog中提到的版本0.13.4的dispatcheEvent(new Event())
方法。
由于必须预期此代码无法在Internet Explorers中使用。
我想知道的是:
为什么测试通过?
查看commit,他们使用与我的指令完全相同的代码。
我还可以做些什么来使我的指令工作?
答案 0 :(得分:0)
我终于结束了从here借来的polyfill。我发现的大多数其他人都没有以这种方式纠正他们假设typeof window.CustomEvent === 'function'
或typeof window.CustomEvent === 'object'
。
这并不能解决Safari window.CustomEvent
一个对象但行为类似于构造函数的问题。
所以
try {
var ev = new Event('click');
catch (e) {
…
}
对我来说是正确的解决方案。
仍在考虑改为angularStrap。