AngularJS ui-router:强制重新加载

22

我有一个从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.href设置为带有指定当前位置的查询字符串参数的index.html,我该如何导航到此位置?

5个回答

22
当前的技巧是:

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

该代码用于重新加载当前页面。

2
如果你的 $state.go 和当前的 $state() 是同一个状态,这种方法就不起作用了。它会被完全忽略并且默默地失败。不过,$window.location.reload() 就能解决这个问题。已测试在 1.4x 上。 - RAC

19

似乎大家都忽略了Serge van den Oever实际想要问的问题,那就是他希望整个页面重新加载,而不仅仅是路由。

如果您在控制器中注入$window服务,这个问题的解决方案就非常简单:

$window.location.reload();

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

如果您只希望路由重载(这似乎更为常见),并且正在使用ui-router,则只需注入$state服务并执行以下操作:
$state.reload();

现在这个bug已经被修复了,这应该会重新初始化控制器,尽管我认为它不会重新初始化resolve


1
Serge van den Oever 表示他想重新加载基本的 HTML 页面(“...它没有重新加载我的初始 index.html...”)。我认为这个答案应该被接受。 - MÇT

1

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

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

0

试试这个:

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

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

嗨,Hydrogen,我的问题是我正在使用AngularJS的优秀ui-router路由系统(http://angular-ui.github.io/ui-router/site/#/api/ui.router),而不是内置的AngularJS路由系统。 - Serge van den Oever
啊,我明白了。在这种情况下,你可能需要尝试:$state.reload()来重新加载它。ui.router有一个 $state 服务,你可以注入它来实现这个功能。 - hydrogen
问题在于 $state.reload() 不会重新初始化控制器。这个问题已经有一个开放的工单 https://github.com/angular-ui/ui-router/issues/582 - WTK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接