Javascript 使用浏览器后退时,角度$位置不更新

Javascript 使用浏览器后退时,角度$位置不更新,javascript,angularjs,back-button,angular-routing,Javascript,Angularjs,Back Button,Angular Routing,有人见过这种行为吗?关于它没有太多的提及,其他的帖子性质也不同。这似乎与有关浏览器行为的文档不一致 当用户 更改地址栏 单击后退或前进按钮(或单击历史记录链接) 点击一个链接 $location# 发生了什么: -哈希更新() 单击“开始”-通过函数更新$location.$$path以更新哈希并加载新视图() 狡猾!用户单击浏览器中的“后退”按钮,哈希更新回,但调试告诉我$location。$$path仍然认为我们在$location。$$path=/guide-基于位置路径的逻辑不起作

有人见过这种行为吗?关于它没有太多的提及,其他的帖子性质也不同。这似乎与有关浏览器行为的文档不一致

当用户

  • 更改地址栏
  • 单击后退或前进按钮(或单击历史记录链接)
  • 点击一个链接
$location#

发生了什么:

  • -哈希更新()
  • 单击“开始”-通过函数更新$location.$$path以更新哈希并加载新视图()
  • 狡猾!用户单击浏览器中的“后退”按钮,哈希更新回,但调试告诉我$location。$$path仍然认为我们在$location。$$path=/guide-基于位置路径的逻辑不起作用
这是一个监视程序,用于在位置上帮助调试:

// listen for the event in the relevant $scope
$rootScope.$on('locationChange', function (event, data) {
    console.log(data);
});

//Call locationChange watch at anytime the page is loaded 
$scope.$emit('locationChange', $location.$$path);
以下是路线:

$routeProvider
    .when('/guide', {
        templateUrl: 'views/guide.html',
        controller: 'GuideController',
        controllerAs: 'guide'
    })
    .when('/', {
        templateUrl: 'views/about.html',
        controller: 'AboutCtrl',
        controllerAs: 'about'
    })
    .otherwise({
        redirectTo: '/'
    });
我是如何解决这个问题的:

var pop = 0;

window.onpopstate = function(event) {
    if (document.location.pathname === '/' && pop > 1) {
        pop = 0;
        document.location = 'http://localhost:9000/';
    }
    pop++;
};

当你说“页面随时加载”是什么意思?该页面只加载一次,然后使用路由器,根据路径创建和销毁控制器。您能提供发出事件的代码吗?正确,无论您是在根路径还是子路径/视图上,页面只加载一次$位置。$$path在一个函数中被省略,该函数在所有应用程序更改时都会触发,但在单击“周围”然后单击“浏览器后退”时不会更新。角度跟踪后退/前进按钮单击的时间和方式?