我想知道如何“重新加载”当前状态,传入一个新参数,以便我的控制器重新初始化。
我正在尝试在侧边栏控件中实现搜索 - 初始搜索使用$ 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" });
现在,当我处于当前状态时,这将使用我的新搜索词更新网址,但控制器代码未触发。
我需要一种方法来强制重新加载我当前所处的相同状态,以便更新新的搜索参数并重新运行人员控制器代码。
如何重新加载当前状态?
答案 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()
在没有它的情况下工作。