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

使用AngularJS中的UI-Router将状态重定向到默认子状态

辛盛
2023-03-14
问题内容

我正在创建一个基于标签的页面,其中显示了一些数据。我在AngularJs中使用UI-Router来注册状态。

我的目标是在页面加载时打开一个默认选项卡。每个选项卡都有子选项卡,并且我想在更改选项卡时打开默认的子选项卡。

我正在使用onEnter函数进行测试,并且正在使用内部,$state.go('mainstate.substate');但是由于循环效应问题(在state.go上对其子状态调用其父状态,依此类推,然后变成循环),它似乎无法正常工作。

$stateProvider

.state('main', {
  url: '/main',
  templateUrl: 'main.html',
  onEnter: function($state) {
    $state.go('main.street');
  }
})

.state('main.street', {
  url: '/street',
  templateUrl: 'submenu.html',
  params: {tabName: 'street'}
})

在这里,我创建了一个plunker演示。

目前,一切正常,除了我没有打开默认选项卡,而这正是我所需要的。

感谢您的建议,意见和想法。


问题答案:

更新: 1.0向前支持开箱即用的redirectTo。

该解决方案来自一个不错的“注释”,它涉及到使用.when() 进行重定向的问题,并且
一个非常不错的 解决方案 (由Chris T,但原始帖子由yahyaKacem撰写)

因此,首先让我们通过重定向设置扩展main:

$stateProvider
    .state('main', {
      url: '/main',
      templateUrl: 'main.html',
      redirectTo: 'main.street',
    })

并只添加这几行

app.run(['$rootScope', '$state', function($rootScope, $state) {

    $rootScope.$on('$stateChangeStart', function(evt, to, params) {
      if (to.redirectTo) {
        evt.preventDefault();
        $state.go(to.redirectTo, params, {location: 'replace'})
      }
    });
}]);


 类似资料:
  • 问题内容: 我的ui路由器状态提供程序中具有以下状态: 这遵循具有默认子状态的最佳做法,如ui-router文档中此处所述。 但是,当我现在在文档中的某处引用父级的链接时,例如,我总是收到一条错误消息,说我无法转换为抽象状态。当我在地址栏中手动输入URL并按Enter时,一切正常。 相关Plunker:http ://plnkr.co/edit/d3Z0tOwC3VCTPqGiB0df?p=pre

  • 问题内容: 考虑以下: 如果转到,我如何默认为子状态? 问题答案: 首先,将属性添加到的状态 。这不是必需的,但是您要设置它,因为您永远不会直接进入此状态,因此总是会进入其子状态之一。 然后做 一个 如下: 给州提供一个 空URL 。这将使其与父状态url匹配相同的url,因为它不会向父url附加任何内容。

  • 问题内容: 我正在做一个文档编辑器。文档可以是Type A或TypeB。可以通过URL通过文档ID对其进行访问,但是如果文档是A或B类型,则该ID不能使它们清晰可见。 因此,我需要按id加载文档,根据其数据确定其类型,然后将其传递给TypeAController或TypeBController。 现在,使用ui-router,我有类似以下内容: 加载状态将加载文档,确定其类型,然后进入下一个状态。

  • 问题内容: 在我正在开发的一个有角度的应用程序中,我希望有一个抽象的父状态,该状态必须解析其所有子状态的某些依赖关系。具体来说,我希望所有要求经过身份验证的用户的状态都必须从某些authroot状态继承该依赖项。 我遇到了无法始终解决父依赖关系的问题。理想情况下,我想让父状态检查用户是否仍自动登录到任何子状态。在文档中,它说 子状态将从父状态继承已解析的依赖项,并可以将其覆盖。 我发现仅当我从父级

  • 问题内容: 我希望能够在不更改状态的情况下更改地址的URL,以防止重新呈现。从我的搜索来看,当前没有提供此功能,但从丑角提供了。 因此,自然而然地,我想使用该州的URL,这样就不必手动键入URL。 我有两个问题: 仅返回相对路径。如何获得绝对路径? 它还返回状态的定义,参数未定义。如何获得带有参数的URL? 举例来说,如果我有一个名为状态有,我有我的状态定义为 因此,现在返回。如何获得完整的URL

  • 问题内容: 我正在使用ui-router来表示AngularJS应用程序中的状态。在其中,我想更改状态而不更改URL(基本上是“详细视图”已更新,但这不会影响URL)。 我使用的显示细节,但如果我指定像一个URL这仅适用于我。 在我看来,当前状态仅通过URL定义。 问题答案: 感谢您的回答,它确实对正确的方向有所帮助,但是我想添加更完整的描述。 在我的特定问题中,有一个复杂的因素,因为我需要向其注