所以我试图能够更改我的应用程序的$ location.path而无需重新加载控制器等。我在此页面找到了一个解决方法:
https://github.com/angular/angular.js/issues/1699
问题是解决方法效果很好,并且在浏览器中按后退按钮时页面不会重新加载。我注意到的另一个奇怪的问题是,当我在$rootScope.$on('$locationChangeSuccess', function (){ ... });
中放置app.run
时,它会在页面加载/路由更改时被调用超过3000次...
我一直使用的代码如下所示:
myService.skipReload = function () {
var lastRoute = $route.current;
$rootScope.$on('$locationChangeSuccess', function () {
$route.current = lastRoute;
});
return MyService;
};
然后我像这样使用它:myService.skipReload.changePath(url);
其中changePath(url)
只包含$location.path(url)
。
编辑:我发现了一个丑陋的解决方法,在app.run我写道:
$rootScope.$on('$locationChangeSuccess', function() {
$rootScope.actualLocation = $location.path();
});
$rootScope.$watch(function () {return $location.path()}, function (newLocation, oldLocation) {
if($rootScope.actualLocation === newLocation) {
myLocationService.refreshView();
console.log('Use of history back, may not always work...');
}
});
如果有更好的方法可以告诉我。