AngularJS: 如何使用ui-router重新加载或刷新ui-view?

8

我正在使用angular ui-router。它在每个路由中都有状态,但是我无法重新加载状态。 以下是我的代码

app.config(function ($urlRouterProvider, $stateProvider) {
$urlRouterProvider.otherwise("/home");
$stateProvider
    .state('home', {
        url: "/home",
        controller: 'HomeController',
        views: {
        "viewHome": {
            templateUrl: "home.html"
        },

    })
}

在HTML中。
<a href="#/home">Home</a>

当我点击主页链接后,它会重定向到主页URL,但当我再次尝试点击主页链接时,它不会刷新相同的状态,它必须刷新主页状态并再次调用HomeController。请给我一些解决方法。

也许这个主题可以帮助你 https://dev59.com/EGgu5IYBdhLWcg3wgnZh - iKBAHT
4个回答

8
使用angular-ui-router,我成功地重新加载了一个状态,代码如下: ```javascript $state.reload(); ```
$state.go($state.current.name, {}, {reload: true})

这会重新加载状态并重新初始化控制器。

我不相信这会重新初始化控制器。它似乎只是重新加载状态...这似乎与简单调用 $state.reload(); 有同样的问题。我是否漏掉了什么? - jrista
根据angular-ui-router的文档,控制器应该重新实例化。有一段时间存在一个错误,但通过测试angular-ui-router的0.2.11和0.2.10版本,该错误似乎在v0.2.11中得到了修复。在这里查看,更改两个版本之间的版本即可查看修复情况。 - blockloop
1
升级到0.2.13,似乎可以工作。顺便说一句,使用该版本也可以使用.reload()。谢谢! - jrista

7

尝试将target="_self"添加到a中。您也可以使用$window.location。此外,$route.reload()应该能解决问题。


你需要将 $window$route 分别导入到控制器中才能使用它们。 - fusio
哦,我明白了。你试过$state.go()吗?(它应该在内部使用transitionTo,所以我不确定它是否有帮助..) - fusio
是的,但它会在控制台中抛出一个错误 TypeError: Object #<Object> has no method 'go'。这是因为 $state.go() 方法只在最新的 alpha 0.0.2 版本中可用,而且它不是一个稳定版本,所以我正在使用之前的版本 0.0.1。 - Anil Kumar Pandey
文档中提到它设置 options = { location: true, inherit: true, relative: $state.$current },所以可以尝试使用这个选项。抱歉我没有其他想法。 - fusio
我认为 $state.go() 在0.0.2版本中也不可用。 - Anil Kumar Pandey
显示剩余4条评论

2
您可以指定要调用的状态,它将重新加载您的页面和控制器。以下代码对我有效:

您可以指定要调用的状态,它将重新加载您的页面和控制器。以下代码对我有效:

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

或者

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

-2

尝试使用:

$window.location.reload()

重新加载页面的内容。将此行代码输入您想要的任何控制器中。


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