javascript - 如何从另一个处理程序触发 angularjs 事件处理程序?

标签 javascript angularjs angularjs-directive angular-ui jquery-triggerhandler

我正在使用 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 已在进行中。然后它无论如何都会关闭弹出窗口...我不知道为什么。

如何修改 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/

相关文章:

javascript - three.js - 带有 aoMap 和第二个 uv 坐标的缓冲区几何

javascript - 使用 lodash 分配函数有什么好处?

mysql - 在 codeigniter 中将 Controller 中的值作为 JSON 传递以查看 Angular Js 上包含的内容

javascript - Angular Directive(指令) : ng-model not updated properly when selection changes

javascript - 在 AngularJS 中启动一个指令后不调用 $watch

javascript - 如何在 Angular 1.x 中的输入字段上使用自定义指令?

javascript - node.js 服务器中用于 Express 的自定义 bodyDecoder

javascript - 使页面剥离效果更好

angularjs - md-select 仅在第一次单击 OS X 时有效

html - 设置div默认激活