在ui-router中,如何只重新解析最本地的状态?

in ui-router, how to re-resolve only the most local state?

我有以下状态树,使用 ui-router,

1 login
2 root (abstract, resolves app-prefs, user-prefs)
    2.1 home (builds a refresh button, should refresh whatever is being shown)
        2.1.1 dashboard (resolves dashboard-prefs)
        2.1.2 search (resolves search-prefs)
        2.1.3 etc
    2.2 etc

home 开始,当用户在 XYZ 状态下按下刷新按钮时,我希望重新输入 XYZ 以重新解析自己的方式XYZ-prefs 但不是层次结构上面的东西。像

$state.go("dashboard", dashboardParams, {please-resolve-only-dashboard})

当我尝试时,来自 home

$state.go("dashboard", dashboardParams, {reload:true})

导致root向下的所有都需要重新解析,这是有问题的,而且代价高昂,因为我只需要重新解析dashboard-prefs.我可以在一些解析器中设置一个更详细的方案,而不是重新解析自己,但恐怕这本身可能成为一项任务。还有其他更惯用的方法吗?

谢谢

a wokring plunker

有一种本机方法可以做到这一点 - 只需更改要重新加载的状态的参数。

要重现上述状态定义,让我们像这样定义仪表板:

.state('dashboard', { 
  parnet: 'home',
  url: "^/dashboard",
  params: { updater : 1, },
  ...
})

我们可以看到,我们根本没有接触 url。它永远不会有任何变化只是 /dashboard

但是我们介绍了最新版本的非常酷的功能 - params: {}。它定义了一些参数 - updater 在我们的例子中。每当发送此参数,并且与其当前值不同时,此子状态 (且仅此子状态)re-init

在此处查看有关状态 params: {} 的更多信息:http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$stateProvider

现在,我们可以创建这个重新加载 link:

<a ui-sref="dashboard({updater : ($stateParams.updater + 1) })">reload</a>

并且随着这个增量,我们可以确定,重新加载将重新加载这个状态

检查一下here