我以示例plnkr为例。
考虑这些嵌套状态:route1和route1.list。
我在route1上定义了一个名为abc的解析函数。现在当我第一次浏览到route1时,会调用abc并将其解析。现在当我导航到route1.list并返回到route1时,abc不再被调用。
http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview
我猜这是有意的,但是考虑这个用例:
解析函数通过http检索一些数据,并且应该在某个时候被刷新/无效,也许在每个状态改变。使用嵌套状态时有什么办法吗?
如果每次注入都调用了解析函数,我可以以任何方式实现它:返回旧的,已解决的承诺,或者创建一个新的。
我只是简单地测试了这一点,但是如果州不是嵌套的东西将按照我的预期工作。由于这个臭味,放弃了嵌套的国家。并且在嵌套状态中具有解决依赖关系实际上是不错的。
感谢设计代码指向我这个方向。解决方案有所不同,所以我写了这个答案。
重新加载是documented as follows:
reload (v0.2.5) – {boolean=false},If true will force transition even if the state or params have not changed,aka a reload of the same state. It differs from reloadOnSearch because you’d use this when you want to force a reload when everything is the same,including search params.
直接的方法是将每个ui-sref链接更改为以下内容:< a ui-sref =“route1”ui-sref-opts =“{reload:true}”> ;. 为了避免在每个链接提供选项,我写了一个围绕$ state的装饰器(另见http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview):
myapp.config(function($provide) { $provide.decorator('$state',function($delegate) { var originalTransitionTo = $delegate.transitionTo; $delegate.transitionTo = function(to,toParams,options) { return originalTransitionTo(to,angular.extend({ reload: true },options)); }; return $delegate; }); });