AngularJS UI路由器:通过页面重新加载来更改URL的正确方法

时间:2015-09-24 11:29:40

标签: angularjs angular-ui-router

我找到了一个解决方案,当我可以在AngularJS中使用页面重新加载来移动网址时:

$window.location = "new_url";
$window.location.reload();

它有一个副作用 - $window.location = "new_url"可以立即更改状态/路由,您可以发现加载的新控制器模板,甚至可以在控制器初始化时发现网络连接,然后只执行$window.location.reload()代码重新加载页面。
我想到了这里描述的几种方式https://stackoverflow.com/a/26853786/551744

$state.go("state name", "state params", { reload: true });

但对我不起作用,它不会重新加载页面 此代码也不起作用:

$state.go("state name", "state params", { notify: false });
$state.reload();

我使用这种方式,这里描述https://stackoverflow.com/a/25649813/551744

$state.go("state name", "state params", { notify: false });
setTimeout(function() {
   $window.location.reload();
}, 500);

bahaviour非常接近需要(在更改状态后,状态不会加载新的控制器和模板):$state.go("state name", "state params", { notify: false });仅使用新网址更改网址和$window.location.reload();实际页面。但这种方式有效:我需要使用setTimeout等待更改网址时。我不知道为什么,但它不会立即发生。我尝试设置0ms,50ms,100ms,但有时url变化不够快,页面realods与之前的url。

我如何克服:

  • “setTimeout code”问题;
  • 或检测到更改url以强制重新加载页面时的事件(它 因为代码包含{ notify: false });
  • ,所以可能会出现问题
  • 或其他解决方案?

1 个答案:

答案 0 :(得分:0)

也许您需要关注状态变化事件:

https://github.com/angular-ui/ui-router/wiki#state-change-events

然后,您可以触发代码在控制器中初始化。