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

角度ui路由器:在解析中获取toState的$ state信息

金和雅
2023-03-14
问题内容

更新 :从开始,这应该在angular-ui-
router中是可能的1.0.0alpha0。请参阅发行说明https://github.com/angular-ui/ui-
router/releases/tag/1.0.0alpha0
和问题https://github.com/angular-ui/ui-
router/issues/1018 I创建。

在解决问题时,我想访问该应用导航到使用角度ui路由器的状态名称和其他属性。

原因:在允许应用进入该页面之前,我想异步加载一些用户数据(包括其访问权限)。

目前这是不可能的,因为将$ state注入到resolve会指向您要导航离开的表单的状态,而不是您要导航到的状态。

我知道我可以:

  • 使用$ rootScope(’$ stateChangeStart’)获取toState并将其保存在我的设置服务中。但我认为这有点混乱。
  • 将状态硬编码到解析中,但是我不想在所有页面上重复使用解析

我还在ui-router github上创建了一个问题(如果您有兴趣,请加1!):https : //github.com/angular-ui/ui-
router/issues/1018

到目前为止,这是我的html" target="_blank">代码。任何帮助表示赞赏!

.config(function($stateProvider) {

    $stateProvider.state('somePage', {
        // ..
        resolve: {
            userData: function($stateParams, $state, Settings) {
                return Settings.getUserData() // load user data asynchronously
                    .then(function (userData) {
                        console.log($stateParams);
                        console.log($state);
                        // Problem: $state still points to the state you're navigating away from
                    });
            }
        }
    });
});

问题答案:

Ui-Router 1.x的更新

$provide.decorator('$state', ($delegate, $transitions) => {
    $transitions.onStart({}, (trans) => {
      $delegate.toParams = trans.params()
      $delegate.next = trans.to().name
    })
    return $delegate
  })

UI路由器0.x

您可以随时$state使用nexttoParams属性进行装饰:

angular.config(function($provide) {
  $provide.decorator('$state', function($delegate, $rootScope) {
    $rootScope.$on('$stateChangeStart', function(event, state, params) {
      $delegate.next = state;
      $delegate.toParams = params;
    });
    return $delegate;
  });
});

并这样使用:

.state('myState', {
    url: '/something/{id}',
    resolve: {
        oneThing: function($state) {
            console.log($state.toParams, $state.next);
        }
    }
});


 类似资料:
  • 问题内容: 角度ui路由器的示例演示在起始页面具有以下链接: “ ui-router”的完整网址为或 “关于”的完整网址为或 当我使用durandalJS时,存在一个限制,即默认URL只是“ /”,不能有“ / ui-router”。 Angular ui路由器插件有相同的限制吗? 问题答案: 请参阅此处,默认路由有一个“其他”选项。

  • 问题内容: 我正在为编写处理程序: 没有include方法。我应该做些不同的事情,还是有办法做我想做的事情? 另外,当//一些登录内容包含时,我会遇到无限循环。是什么原因造成的? 这是一个更完整的示例,展示了我们最终要进行的工作: 我不喜欢在中搜索特定状态。感觉很幼稚。我不确定为什么并且不能成为该服务的实例,或者为什么该服务不能在其方法中接受状态配置覆盖。 无限循环是由我们方面的错误引起的。我不喜

  • 问题内容: 有没有办法在ui-router中的url开头具有可选属性?如果是这样,怎么办? 我想实现以下目标: 因此, “城市” 将是可选的。 谢谢您的任何投入。 问题答案: 有两个单独的路由指向同一状态可能是一个坏习惯,但是没有什么可以阻止您创建使用相同分辨率/控制器/模板的两个不同状态。 同样,这可能是不好的做法,但我想不出更好的解决方案

  • 问题内容: 我从一个演示程序离子(开始),并添加一个到一个视图: 我在这里监视被拒绝的s: 由于某种原因,如果立即拒绝(请参见上文),则不会运行的回调。如果我做的完全一样,但是在Ionic之外,那行得通! 而且,尝试通过这样做来延迟拒绝会导致不同的行为。现在,它可以按预期在浏览器中运行,但仍无法在设备上运行。尝试进一步延迟,将导致设备成功: 谁能阐明这一点? 问题答案: 根据我对Angular和P

  • 问题内容: 使用ui- router并将父状态URL设置为导致我的URL看起来像在查看子页面时一样。我只想在散列和子项之间添加一个。 我尝试将父状态网址保留为空白,但是使用锚链接时,ui-sref不会链接回父状态。有人知道使用根级别未命名的父URL的解决方案吗? app.config child.config 问题答案: 将有解决方案 _(几乎)_任何东西。有一个工作的plnkr。我们将要使用的功

  • 我试图找出是否有一个更优化的方法在两个兄弟孩子路由之间共享同一个解析器。下面是一个路由与解析器相关的示例。 现在,我正在为每个子路由重复解析器调用,我认为这不是最优的。有人知道有没有更好的方法来共享来自共享同级子解析器的数据吗?我考虑将来自重复解析器的数据设置为共享服务,然后另一个子同级路由将访问来自服务的数据(而不是在解析器中进行另一个api调用)。还有其他更好的解决方案吗?