Chr*_*tze 23 angularjs angular-ui-router
我打算使用ui-routers解析功能向我的控制器注入一些readiliy解决的promises.
我用示例plnkr做了一个例子.考虑这些嵌套状态:route1和route1.list.我有一个名为的abc定义的解析函数route1.现在当我route1第一次导航时,abc被调用并将被解决.现在,当我导航到route1.list并返回时route1,abc不会再次调用.
http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview
我想这是故意的,但请考虑这个用例:resolve函数通过http检索一些数据,并且应该在某些时候刷新/无效,可能在每次状态更改时.有没有办法在使用嵌套状态时执行此操作?如果在每次注入时都调用了resolve函数,我可以按照我想要的方式实现它:返回旧的,已解决的promise或创建一个新的promise.
我只是对此进行了简单的测试,但如果状态不是嵌套的,那么事情就会像我预期的那样工作.放弃嵌套状态因为这很臭.并且在嵌套状态中具有可用的解析依赖性实际上很好.
Chr*_*tze 30
直供选项reload:true来go()/ transtionTo()/ ui-sref做的伎俩:-)感谢Designing the Code您指出我在这个方向.解决方案虽然有点不同,所以我写下了这个答案.
重新加载记录如下:
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):
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;
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10596 次 |
| 最近记录: |