0

我正在使用 AngularJS 1.3.0-beta.2、jQuery 2.1.0、Angular UI 0.11 和我的 Angular UI 工具提示小部件的自定义版本,我希望工具提示中的按钮在单击时关闭工具提示。

Plunkr

关键部分位于 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 already in progress。然后它无论如何都会关闭弹出窗口......我不知道为什么。

当用户单击工具提示中的按钮时,如何修改 closePopup(或调用它的 ng-click)以使工具提示立即关闭?

注意:我使用这个 Plunker作为指导,从 Angular UI 的工具提示代码中改编了我的 custom_tooltip.js 代码。我还尝试直接更改 tt_isOpen 值并定义一个新的 crudtooltip-toggle 属性,但都取得了非常有限的成功。

4

2 回答 2

1

也许我没有抓住重点,但是对于如此简单的功能,您的代码似乎非常复杂和令人费解。在任何情况下,延迟实际上是由于$timeout正在等待某些动画完成。超时被触发,因为scope.tt_animation评估为真。只需在第258行将超时更改为 0 即可解决crud_tooltip.js问题。看到这个笨蛋

这是问题区域:

            if ( scope.tt_animation ) {
              transitionTimeout = $timeout(removeTooltip, 500);
            } else {
              removeTooltip();
            }
于 2014-06-19T05:10:02.970 回答
1

你看错东西了。

该延迟来自其他地方,并且绝对不受 $timeout 的约束,但也与 notimeout 方法绑定(当然,忽略错误,但可以通过$scope.$$phase首先检查来轻松修复)。

此外,当您单击原始链接时,它们都存在关闭延迟。

因此,在 4 种情况下,您会得到相同的延迟,这意味着它在代码中。如果我找到导致它的原因,我会再看一下并更新答案。

于 2014-06-15T22:58:44.577 回答