angularjs – UI-Router的解析函数只能调用一次

前端之家收集整理的这篇文章主要介绍了angularjs – UI-Router的解析函数只能调用一次前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我将使用ui路由器解析功能,在我的控制器中注入一些可靠的解决方案。

我以示例plnkr为例。
考虑这些嵌套状态:route1和route1.list。
我在route1上定义了一个名为abc的解析函数。现在当我第一次浏览到route1时,会调用abc并将其解析。现在当我导航到route1.list并返回到route1时,abc不再被调用

http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview

我猜这是有意的,但是考虑这个用例:
解析函数通过http检索一些数据,并且应该在某个时候被刷新/无效,也许在每个状态改变。使用嵌套状态时有什么办法吗?
如果每次注入都调用了解析函数,我可以以任何方式实现它:返回旧的,已解决的承诺,或者创建一个新的。

我只是简单地测试了这一点,但是如果州不是嵌套的东西将按照我的预期工作。由于这个臭味,放弃了嵌套的国家。并且在嵌套状态中具有解决依赖关系实际上是不错的。

提供选项reload:true to go()/ transtionTo()/ ui-sref做的诀窍:-)
感谢设计代码指向我这个方向。解决方案有所不同,所以我写了这个答案。

重新加载是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}”&gt ;. 为了避免在每个链接提供选项,我写了一个围绕$ 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;
  });
});
原文链接:https://www.f2er.com/angularjs/144943.html

猜你在找的Angularjs相关文章