路径更改而不重新加载路径+允许后退按钮重新加载路径(AngularJS)

时间:2014-04-08 14:29:49

标签: angularjs routes

所以我试图能够更改我的应用程序的$ 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...');
  }
});

如果有更好的方法可以告诉我。

0 个答案:

没有答案