UI-Router - 重新加载当前状态

17

我想知道如何“重新加载”当前状态,传入一个新参数以便我的控制器重新初始化。

我正在尝试在我的侧边栏控件中实现搜索 - 初始搜索使用 $state.go 转换到我的新状态,代码如下:

if ($event.type === 'click' || $event.keyCode === keyCodes.enter) {
     $state.go("people.search", { search: vm.searchText });
如果我在应用程序的另一个状态,然后运行上面的代码,一切都正常工作。因此,我将搜索词作为参数传递,并使用$state.go将我的状态转换到people.search状态,我的people控制器(包含搜索函数)得到命中。但是,一旦我处于people.search状态并尝试使用搜索控件,people控制器代码不再被触发,参数也不再更新。
我尝试修改代码如下:
$state.go("people.search", { search: vm.searchText }, { location: "replace" });

现在当我处于当前状态时,它将使用我的新搜索条件更新网址,但控制器代码不会执行。

我需要一种方法来强制重新加载当前状态,以便更新新的搜索参数并重新运行people控制器代码。

我如何重新加载当前状态?

4个回答

14

在JavaScript内部,您可以这样调用当前状态:

$state.go('.', { search: vm.searchText })

从版本1.2.5开始,您也可以只重新加载状态:

$state.reload()

这很好,但我更喜欢通过指令以不同的参数重新加载状态。 因此,我查看了ui-router源代码,只是为了理解当状态保持不变时,uiSref指令会被忽略。虽然防止重新加载如果真的没有改变什么很好,但在某些情况下更改状态内部的参数可能很有用。

所以我创建了自己的指令uiSrefParams: https://gist.github.com/IlanFrumer/8281567

例子

<span>Change language:</span>
<a ui-sref-params="{lang: 'en'}">english</a>
<a ui-sref-params="{lang: 'ru'}">russian</a>

希望这可以帮到你。


1
ui-sref自v0.2.11(2014-08-26)以来,仅使用参数(与您的ui-sref-params自定义指令相同)就可以很好地工作。请参见文档中的示例中的下一页链接。 - Kate Miháliková

10

试一试

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

2

请注意从版本0.2.14开始,您也可以选择仅重新加载当前状态而不是其父状态。

因此,$state.go(people.search, {}, {reload: true});将重新加载people状态以及所有子状态。

$state.go(people.search, {}, {reload: "people.search"});将不重新加载people状态,但将重新加载people.search及其子状态。


0

还要注意,你的状态应该在结尾处有?param才能使这个解决方案起作用。我曾经因为没有它而被卡住了,因为$location.search()没有它也可以工作。


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