【问题标题】:AngularJS UI Router: Correct Way to Change Url with Page ReloadingAngularJS UI 路由器:通过页面重新加载更改 URL 的正确方法
【发布时间】:2015-12-21 23:44:49
【问题描述】:

当我可以在 AngularJS 中通过页面重新加载来更改 url 时,我找到了一个解决方案:

$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);

行为非常接近需要(更改 url 后状态不会加载新的控制器和模板):$state.go("state name", "state params", { notify: false }); 仅更改 url 和 $window.location.reload(); 具有新 url 的 realods 页面。但是这种方式有副作用:我需要使用setTimeout 来等待 url 何时更改。我不知道为什么,但它不会立即发生。我尝试设置 0 毫秒、50 毫秒、100 毫秒,但有时 url 变化不够快,并且页面 realods 与以前的 url。

我该如何克服:

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

【问题讨论】:

    标签: angularjs angular-ui-router


    【解决方案1】:

    也许你需要注意状态变化事件:

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

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

    【讨论】:

    • { notify: false } 使 url 发生变化,但它不会引发事件 $stateChangeStart$stateChangeSuccess,但 { notify: true}(默认) - 会。但我不能使用{ notify: true},因为它与第一个示例相同
    • 您使用 $state.go 而不是 $location.path 是否有原因?也许我需要查看更多代码才能完全理解您要做什么。
    • 我需要在页面加载时更改 url/route/page。我可以使用$window.location = "new_url"; $window.location.reload(); 或任何其他方式,但它们具有所描述的副作用。所以我需要能够通过重新加载来更改 url/页面,但不会产生冗余操作的副作用
    猜你喜欢
    • 2019-11-19
    • 2014-06-28
    • 2020-04-07
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2020-08-06
    • 2015-10-30
    相关资源
    最近更新 更多