加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 08:23:03 所属栏目:安全 来源:网络整理
导读:我将使用ui路由器解析功能,在我的控制器中注入一些可靠的解决方案。 我以示例plnkr为例。 考虑这些嵌套状态:route1和route1.list。 我在route1上定义了一个名为abc的解析函数。现在当我第一次浏览到route1时,会调用abc并将其解析。现在当我导航到route1.l
我将使用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;
  });
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读