我正在使用AngularJS 1.3.0-beta.2,jQuery 2.1.0,Angular UI 0.11,以及我自定义版本的Angular UI的Tooltip小部件,我希望工具提示中的按钮在点击时关闭工具提示。< / p>
关键部分是crud_tooltip.js:372:
scope.closePopup = function() {
var trigger = element.prev();
if (scope.mode === 'timeout') {
$timeout(function() {
trigger.triggerHandler('click');
});
}
else {
trigger.triggerHandler('click');
}
};
使用$ timeout的版本有效,但点击按钮和看到弹出窗口关闭之间有明显的延迟。
不使用$ timeout的版本会出错: [$ rootScope:inprog] $ apply in progress in progress 。然后关闭弹出窗口......我不知道为什么。
当用户点击工具提示中的按钮时,如何修改closePopup(或调用它的ng-click)以立即关闭工具提示?
注意:我使用this Plunker作为指导,从Angular UI的工具提示代码中调整了我的custom_tooltip.js代码。我也试过直接更改tt_isOpen值并定义一个新的crudtooltip-toggle属性,两者都取得了非常有限的成功。
答案 0 :(得分:1)
你正在看错了。
这种延迟来自其他地方并且绝对不受$ timeout限制,但也适用于notimeout方法(当然,忽略错误,但可以通过首先检查$scope.$$phase
来轻松修复)。
此外,当您单击两个原始链接时,关闭延迟就在那里。
因此,在4种情况下,您会得到相同的延迟,这意味着它在代码中有所作为。如果我找到导致答案的原因,我会另外看一下并更新答案。
答案 1 :(得分:1)
也许我忽略了这一点,但是你的代码似乎非常复杂,并且因为这种简单的功能而令人费解。在任何情况下,延迟实际上是由$timeout
等待一些动画完成。超时被触发,因为scope.tt_animation
评估为真实。只需将crud_tooltip.js
的 258 行的超时更改为0即可解决问题。见this plunk
以下是问题区域:
if ( scope.tt_animation ) {
transitionTimeout = $timeout(removeTooltip, 500);
} else {
removeTooltip();
}