在页面重定向上,Angular指令的事件监听器错过了jQuery事件触发器

时间:2015-04-23 00:55:05

标签: jquery angularjs events redirect directive

TL; DR

我需要在页面重定向触发的jQuery单击事件之前发生Angular链接功能。

我有一个Angular指令,在其链接函数中等待jQuery click事件:

// something like this
link: function(scope) {

    angular.element('#parent-selector').on('click', '#buttonId') {

        // force digest since looking outside of Angular
        scope.$apply(function() {

            // do some stuff that looks outside of Angular

        });
    }

}

我的目标是让这些事情发生。当我点击按钮时,它确实发生了,它让我很开心。我可以一次又一次地点击它,然后就会发生这样的事情;我可以重新加载页面,然后单击按钮,然后仍然会发生一些事情,我感到非常满意。

好吧,我在不同视图中也有一个不同的按钮,其URL不同于触发点击事件的URL。单击此按钮时,它将使用Angular指令和jQuery单击事件重定向到视图。在重定向时,它调用jQuery click事件来触发我想要的功能,但无济于事。现在我很难过。

// something along these lines
$('#buttonId').trigger('click');

使用'调试器'并查看Chrome开发工具我已经能够确定以下内容:

  1. 当它工作时,我很高兴,这是因为Angular指令的链接功能首先加载。这是有道理的,因为该指令可以在事件触发之前设置监听器。

  2. 如果它不起作用,我很难过,这是因为在jQuery点击事件触发后,Angular指令的链接功能会加载。请注意,它仍在监听事件,因为任何后续点击按钮都会按预期触发事件。

  3. 但是第一次触发,强制点击页面重定向,在链接功能有机会收听之前就已经发生了。

    有任何想法,建议和问题吗?我知道这有点模糊,我为此道歉。我很乐意提供更多细节。关键是要注意一切都在起作用,但事件的时间除外。我完全希望这些东西按照我的要求发生,如果只是在重定向之后,Angular链接功能可以在点击触发器之前加载。

1 个答案:

答案 0 :(得分:0)

我能够通过使用Angular来查找页面重定向来解决这个问题,我通过将$ window作为依赖项传递给指令来实现。

// on redirect...
if ($window.location.hash == '#some-hash') {
    // do stuff that I want to get done
}

请注意,这并没有真正解决问题。我认为获得我想要的功能是一种破解。

但问题仍然存在:为什么Angular指令的链接功能仅在页面重定向上的jQuery触发器之后发生,而不是在页面重新加载之前(即使我让jQuery等待文档准备就绪)或窗口加载)?