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开发工具我已经能够确定以下内容:
当它工作时,我很高兴,这是因为Angular指令的链接功能首先加载。这是有道理的,因为该指令可以在事件触发之前设置监听器。
如果它不起作用,我很难过,这是因为在jQuery点击事件触发后,Angular指令的链接功能会加载。请注意,它仍在监听事件,因为任何后续点击按钮都会按预期触发事件。
但是第一次触发,强制点击页面重定向,在链接功能有机会收听之前就已经发生了。
有任何想法,建议和问题吗?我知道这有点模糊,我为此道歉。我很乐意提供更多细节。关键是要注意一切都在起作用,但事件的时间除外。我完全希望这些东西按照我的要求发生,如果只是在重定向之后,Angular链接功能可以在点击触发器之前加载。
答案 0 :(得分:0)
我能够通过使用Angular来查找页面重定向来解决这个问题,我通过将$ window作为依赖项传递给指令来实现。
// on redirect...
if ($window.location.hash == '#some-hash') {
// do stuff that I want to get done
}
请注意,这并没有真正解决问题。我认为获得我想要的功能是一种破解。
但问题仍然存在:为什么Angular指令的链接功能仅在页面重定向上的jQuery触发器之后发生,而不是在页面重新加载之前(即使我让jQuery等待文档准备就绪)或窗口加载)?