我想知道如何“重新加载”当前状态,传入一个新的参数,以便我的控制器被重新初始化。
我试图在我的边栏控件中实现搜索,而最初的搜索使用$ 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" });
现在当我处于当前状态时,这将更新我的新搜索字词的URL,但是控制器代码没有触发。
我需要一种强制重新加载与我目前相同状态的方法,以便新的搜索参数得到更新,人员控制器代码重新运行。
如何重新加载当前状态?
内部javascript您可以像这样调用当前状态:
原文链接:https://www.f2er.com/angularjs/144141.html$ state.go(‘。’,{search:vm.searchText})
从版本1.2.5开始,您也可以只使用重新加载状态:
$ state.reload()
这很好,但我更喜欢一种方式来重新加载一个指令中不同参数的状态。
所以我看了ui路由器的源代码只是为了了解当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>
希望有帮助。