ui-router - 重新加载当前状态

时间:2013-11-20 17:47:47

标签: angularjs angular-ui-router

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

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

if ($event.type === 'click' || $event.keyCode === keyCodes.enter) {
     $state.go("people.search", { search: vm.searchText });

如果我在应用程序中处于另一个状态,并且上面的代码运行,则一切正常。所以,我将搜索词作为参数传递,$ state.go将我的状态转换为people.search状态,我的人员控制器(包含搜索功能)被点击。但是,一旦我在people.search状态并尝试使用搜索控件,人员控制器代码就不会再被命中,参数也不会更新。

我尝试将代码修改为:

$state.go("people.search", { search: vm.searchText }, { location: "replace" });

现在,当我处于当前状态时,这将使用我的新搜索词更新网址,但控制器代码未触发。

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

如何重新加载当前状态?

4 个答案:

答案 0 :(得分: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 :(得分:9)

试试这个

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

答案 2 :(得分:2)

0.2.14起注意你还可以选择重新加载当前状态而不是它的父级。

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

虽然$state.go(people.search, {}, {reload: "people.search"});不会重新加载people州,但会重新加载people.search及其子级。

答案 3 :(得分:0)

另请注意,您的州最后应该?param才能使此解决方案正常运行。我已经抓住了这个,因为$location.search()在没有它的情况下工作。