防止所有$ state转换,直到promise得到解决

时间:2015-02-09 22:57:34

标签: angularjs angular-ui-router

我正在使用ui-router 我希望能够阻止任何状态转换,直到解决了承诺。

有多个状态,因此在所有状态下设置相同的resolve属性并不是一个好主意。

承诺需要在Angular应用程序内部解决,因此在解决外部承诺后引导应用程序将无效。

我当前的解决方案依赖于调用$stateChangeStart的{​​{1}}侦听器,并在解析完承诺后将其自行删除。这个解决方案有许多并发症,除非它的意图不明确,除非得到很好的评论。

那么,是否有更好的解决方案来阻止所有状态转换,直到一切都很酷?

2 个答案:

答案 0 :(得分:3)

创建一个抽象父状态,使该状态的其余子状态。在父状态上使用resolve对象,以便所有子状态都可以使用它产生的依赖关系。

请参阅:https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views#abstract-states

  

抽象状态可以具有子状态但不能自行激活。一个'摘要'国家只是一个无法转变的国家。当其中一个后代被激活时,它会被隐式激活。

     

有关如何使用抽象状态的一些示例如下:

     
      
  • 通过解决方案提供已解决的依赖关系以供子状态使用。
  •   

答案 1 :(得分:2)

我想你想使用$urlRouterProvider.deferIntercept()

见这里:http://angular-ui.github.io/ui-router/site/#/api/ui.router.router。$ urlRouterProvider

app.config(function ($urlRouterProvider) {
  $urlRouterProvider.deferIntercept();
};

app.run(function($urlRouter, myservice) {
  myservice.promise.then(function() {
    $urlRouter.listen();
    $urlRouter.sync();  // not sure if this is necessary
  });
});