当前位置: 首页 > 面试题库 >

Angular JS UI路由器如何从父级重定向到子状态?

韦睿
2023-03-14
问题内容

使用onEnter重定向到状态时,如果新状态是当前状态的子级,则会发生无限循环

例:

$stateProvider
  .state 'inventory',
    url: '/inventory'
    templateUrl: 'views/inventory.html'
    controller: 'InventoryCtrl'
    onEnter: () ->
      $state.go 'inventory.low'
  .state 'inventory.low',
    url: '/low'
    templateUrl: 'views/inventory-table.html'
    controller: 'LowInventoryCtrl'

什么时候:

$state.go 'inventory.low'

被调用后,状态inventory被重新初始化,导致其被再次调用=无限循环。

但是,如果重定向状态为:

$state.go 'otherStateThatIsNotAChild'

不会发生此问题。我假设父状态正在重新初始化,但是为什么呢?

  1. 为什么在子状态上.go调用父状态会被重新初始化?
  2. 那么,您将如何处理重定向到子状态?

问题答案:

1)为什么在子状态上调用.go时会重新初始化父状态?

在进行过渡时,任何$ state.go / transitionTo都将导致 当前进行中的
过渡被取代。被取代的进程中转换将立即取消。由于在inventory调用所有状态的onEnters时尚未完成向原始过渡的转换,因此取消了原始过渡,并从先前处于活动状态的状态开始了
新的 过渡inventory.low

参见ui-router src https://github.com/angular-ui/ui-
router/blob/master/src/state.js#L897

2)那么,您将如何处理重定向到子状态?

你可以…

  • $state.go$timeout()允许重新定向之前的原始过渡才能完成。
  • 从您的控制器调用$ state.go。过渡完成后,UI-router从ui-view指令调用控制器。

无论如何,请务必确保您的应用程序这样重定向。如果用户直接导航到清单的其他任何子状态(例如inventory.high),则重定向仍会发生,从而迫使他们达到inventory.low原定的目的。



 类似资料:
  • index.js Button.js 我的问题是“如何从Button.js到index.js获取标志值”?(儿童对父母)。

  • 我正在尝试使用react router(版本^1.0.3)做一个简单的重定向到另一个视图的操作,我只是觉得有些累。 我只需要将用法发送到“/login”,就这样。 我能做什么? 控制台中的错误: 未捕获的引用错误:未定义PropType 用我的路线归档

  • 问题内容: 我想用以下结构构建一个站点header-view,main-view,footer- view。因此,我定义了一个包含页眉和页脚的根路由。root的子代将是我的全部站点。在这些站点中,我将拥有更多的嵌套视图。 在下面的代码中,它确实显示了页眉,但未显示页脚和主视图。一旦删除父级继承,它将显示主视图,但不显示页眉和页脚。 的HTML JS 问题答案: 有一个与正在工作的矮人有关的链接。

  • 英文原文:http://emberjs.com/guides/routing/redirection/ 过渡与重定向 在路由中调用transitionTo或者在控制器中调用transitionToRoute,将停止当前正在进行的过渡,并开启一个新的,这也用作重定向。transitionTo具有参数,其行为与link-to助手相同。 如果过渡到一个没有动态段的路由,路由的model钩子始终都会运行。

  • 问题内容: 我有一些路线的角度应用程序,例如: 使用angular的html5路由模式,当您从应用程序内单击指向链接的链接时,这些链接可以正确解决,但是当您进行硬刷新时,这些链接当然会出现404错误。为了解决这个问题,我尝试实现基本的htaccess重写。 这适用于角度请求,但是当我尝试在我的域内加载脚本或进行ajax调用时,例如: 该脚本不会加载-它的请求被重定向,并且它尝试加载index.ht