我正在使用 AngularJS 1.3.0-beta.2、jQuery 2.1.0、Angular UI 0.11 和我的 Angular UI 工具提示小部件的自定义版本,并且我希望工具提示中的按钮在单击时关闭工具提示。
关键部分位于 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 已在进行中。然后它无论如何都会关闭弹出窗口...我不知道为什么。
如何修改 closePopup(或调用它的 ng-click)以使工具提示在用户单击工具提示中的按钮时立即关闭?
注意:我使用 this Plunker 从 Angular UI 的工具提示代码改编了我的 custom_tooltip.js 代码。作为指导方针。我还尝试过直接更改 tt_isOpen 值并定义新的 crudtooltip-toggle 属性,但效果都非常有限。
最佳答案
也许我没有捕获要点,但是对于如此简单的功能,您的代码似乎非常复杂和令人费解。无论如何,延迟实际上是由于等待某些动画完成的 $timeout
造成的。超时被触发是因为 scope.tt_animation
的计算结果为 true。只需将 crud_tooltip.js
的第 258 行的超时更改为 0 即可解决该问题。请参阅this plunk
这是问题区域:
if ( scope.tt_animation ) {
transitionTimeout = $timeout(removeTooltip, 500);
} else {
removeTooltip();
}
关于javascript - 如何从另一个处理程序触发 angularjs 事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24178941/