我正在尝试在使用标准ui-router
的AngularJS应用程序之外侦听网址修改事件。由于Angular更新了位置 hash ,我认为它会触发onhashchange
个事件。但是,在Mac上的最新Chrome / Firefox中,它永远都不会。
我所看到的(在Chrome中)是为初始加载而触发一次的popstate事件:
$(window).on('hashchange', function(){
console.log('hashchange'); // Never fired
});
$(window).on('popstate', function(){
console.log('popstate'); // Only fires on initial app load
});
我可以在Angular代码本身之外听一个不同的事件吗?
答案 0 :(得分:0)
基于证据,它似乎正在使用pushState
,并且没有为该方法触发事件,因此我发现的唯一解决方案是覆盖pushState方法并触发自定义事件:
// Custom pushState event
(function(history){
var pushState = history.pushState;
history.pushState = function(state){
$(window).trigger('pushState');
return pushState.apply(history, arguments);
};
})(window.history);
$(window).on('pushState', function(event){
console.log('hashchange');
});