【问题标题】:AngularJS ui-router: force reloadAngularJS ui-router:强制重新加载
【发布时间】:2017-04-07 00:43:19
【问题描述】:

我有一个从 index.html 开始并使用 ui-router 的 AngularJS 应用程序。基于触发器,我想重新加载整个页面。我试过了:

$state.go($state.current, $stateParams, {
    reload: true,
    inherit: false,
    notify: true
});

但这不起作用。它不会重新加载我的初始 index.html。

我能做到:

window.location.href = "index.html";

但是我在我的初始页面,而不是当前状态。

是否应该使用指定当前位置的查询字符串参数设置 window.location.hrefindex.html?如果我这样做了,我该如何导航到这个位置?

【问题讨论】:

    标签: angularjs angular-ui-router


    【解决方案1】:

    目前的诀窍是:

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

    【讨论】:

    • 如果您的 $state.go 是相同的 $state(),这将不起作用。它被完全忽略并默默地失败。 $window.location.reload() 可以解决问题。测试 1.4 倍
    【解决方案2】:

    似乎每个人都忽略了 Serge van den Oever 似乎实际上在问的问题,那就是他希望重新加载整个 页面,而不仅仅是路径。

    如果将$window 服务注入控制器,解决方案非常简单:

    $window.location.reload();
    

    如果您只想重新加载路由(这似乎更常见),并且正在使用 ui-router,那么只需注入 $state 服务并执行以下操作:

    $state.reload();
    

    既然 bug 已经修复,这应该会重新初始化控制器,尽管我认为它不会重新初始化 resolves。

    【讨论】:

    • Serge van den Oever 表示他想重新加载基本 html 页面(“...它不会重新加载我的初始 index.html...”)。我认为这个答案应该被接受。
    【解决方案3】:

    这在类似的情况下对我有用。

    $state.go('root.state').then(function(){
        $state.reload();
    });
    

    【讨论】:

      【解决方案4】:

      如果您在控制器中包含 $route 服务,您可以尝试 $route.reload();

      【讨论】:

      • 嗨,氢,问题是我使用的是 AngularJS (angular-ui.github.io/ui-router/site/#/api/ui.router) 的高级 ui-router 路由系统,而不是内置的 AngularJS 路由系统。
      • 啊,我明白了,在这种情况下,您可能需要尝试:$state.reload() 以使其重新加载。 ui.router 有一个 $state 服务,您可以注入来执行此操作。
      • 问题是 $state.reload() 不会再次初始化控制器。 github.com/angular-ui/ui-router/issues/582
      【解决方案5】:

      试试这个:

      $state.transitionTo($state.current, $stateParams, {
          reload: true,
          inherit: false,
          notify: true
      });
      

      【讨论】:

        猜你喜欢
        • 2016-05-03
        • 2016-12-10
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多