我打算使用ui-routers解析功能将一些可立即解析的 promise 注入(inject)到我的 Controller 中。
我使用示例plnkr进行了示例。
考虑以下嵌套状态:route1
和route1.list
。
我有一个在abc
上定义的名为route1
的解析函数。现在,当我第一次导航到route1
时,就会调用abc
并将其解决。现在,当我导航至route1.list
并返回至route1
时,不再再次调用abc
。
http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview
我想这是故意的,但请考虑以下用例:
resolve函数通过http检索某些数据,并且应该在某些时候(可能在每次状态更改时)刷新/无效。使用嵌套状态时,有什么方法可以做到这一点?
如果在每次注入(inject)时都调用resolve函数,则可以按我想要的任何方式实现它:返回旧的,已解决的Promise或创建一个新的Promise。
我只是对此进行了简短的测试,但是如果状态不是嵌套的,那么一切都会按我的预期进行。但是,由于这种臭味,放弃了嵌套状态。而且,在嵌套状态下提供可解析的依赖项实际上是很好的。
最佳答案
提供选项reload:true
到go()
/ transtionTo()
/ ui-sref
可以达到目的:-)
感谢Designing the Code
向我指出了这个方向。但是,解决方案有所不同,因此我写下了这个答案。
重新加载为documented as follows:
直接的方法是将每个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, toParams, angular.extend({
reload: true
}, options));
};
return $delegate;
});
});
关于angularjs - UI-Router解析功能仅被调用一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22730868/