从外部检测AngularJS onHashChange事件

时间:2014-02-14 01:26:25

标签: javascript angularjs

我正在尝试在使用标准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代码本身之外听一个不同的事件吗?

1 个答案:

答案 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');
});