我打算使用 ui-routers 解析功能将一些易于解析的承诺注入到我的控制器中。
我用示例 plnkr 来做一个例子。
考虑这些嵌套状态:route1
and route1.list
。
我有一个名为的解析函数abc
定义于route1
。现在当我导航到route1
首次,abc
被调用并将被解决。现在当我导航到route1.list
然后回到route1
, abc
不再被调用。
http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview
我想这是故意的,但考虑一下这个用例:
解析函数通过 http 检索一些数据,并且应该在某个时刻(也许在每次状态更改时)刷新/失效。使用嵌套状态时有什么方法可以做到这一点吗?
如果在每次注入时调用解析函数,我可以以任何我想要的方式实现它:返回旧的、已解决的承诺或创建一个新的承诺。
我只是简单地测试了这一点,但如果状态没有嵌套,事情就会按我的预期工作。但因为这个而放弃嵌套状态很糟糕。在嵌套状态中提供可用的解析依赖项实际上很好。
提供选项reload:true
to go()
/ transtionTo()
/ ui-sref
有用吗:-)
谢谢Designing the Code
为我指明了这个方向。不过解决方案有点不同,所以我写下了这个答案。
重新加载是记录如下 http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.%24state:
reload (v0.2.5) - {boolean=false},如果 true 将强制转换,即使状态或参数没有更改,也称为相同状态的重新加载。它与 reloadOnSearch 不同,因为当您想要在一切都相同(包括搜索参数)时强制重新加载时,您可以使用它。
最直接的方法就是改变每一个ui-sref
链接到这样的东西:<a ui-sref="route1" ui-sref-opts="{reload: true}">
.
为了避免在每个链接上提供选项,我编写了一个装饰器$state
(也可以看看http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview 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, toParams, angular.extend({
reload: true
}, options));
};
return $delegate;
});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)