【问题标题】:Is there a way to resolve a promise before any sub-resolves in AngularUI Router有没有办法在AngularUI路由器中的任何子解决之前解决承诺
【发布时间】:2017-11-24 22:58:13
【问题描述】:

我在咖啡脚本中有 2 个状态...

stateProvider.state  'test',
    ...
    resolve:
        user: (LongRunning)->
            LongRunning.authenticate().then ->
                console.log("We are authenticated!")

stateProvider.state  'test.child',
    ...
    resolve:
        other: (AfterAuth)->
            AfterAuth.soSomethingWithAuth().then ->
                console.log("We are done!")

当然这不起作用,因为子解析是在父的身份验证方法被解析之前启动的。这意味着第二个函数不会被验证并导致整个状态失败。

现在它不一定是状态路径的一部分,但它需要在调用解析函数时完全完成。

在调用子方法之前,如何确保父函数完全解析?

糟糕的 (?) 解决方案

我能想到的一个答案是使用手动引导过程。但是,这很乏味,因为我需要重新连接所有服务。无论如何我可以在 Angular 中做到这一点吗?

【问题讨论】:

    标签: angularjs coffeescript angular-ui-router angular-ui


    【解决方案1】:

    您使用 AngularUI 路由器来支持 Angular 2 还是 AngularJS?我认为这是 AngularJS,因为您使用的是 coffeescript 和 AngularUI 路由器。这是 Angular 标签而不是 AngularJS。

    无论如何,在 AngularUI 路由器中,一个解析器可以依赖于另一个解析器。类似的东西:

     function firstStep($stateParams, resolveStatus) {
       return $q.resolve();
     }
    
     resolve: {
       firstStep: firstStep,
       secondStep: ['firstStep', function (firstStep) {
       ...
       }]
     }
    

    【讨论】:

    • 我将补充一点,您可以使用来自父路由的所有已解析参数在子路由中使用依赖注入。在您的示例中,它具有相同的解决方案 - 但不必如此。
    • 正确,但默认情况下,父级解析在继续 @hilnius 之前尚未完成。因此,不能保证在调用子项之前解决父项中的问题。如果这确保是这种情况(添加依赖变量)对孩子有效,那应该没问题。
    • 如果有 30 个步骤,我必须将其添加到每个步骤中吗?有没有办法说“在 firstStep 之后运行任何继承自此的步骤”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    相关资源
    最近更新 更多