阻止所有 $state 转换,直到 promise 被解决

Prevent all $state transitions until promise is resolved

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

有多个状态,所以设置相同的 resolve 属性 不是一个好主意。

promise 需要在 Angular 应用程序内部解析,因此在解析外部 promise 后引导应用程序将不起作用。

我当前的解决方案依赖于有一个 $stateChangeStart 侦听器调用 event.preventDefault(); 并在 promise 解决后自行删除。这个解决方案有很多复杂的地方,除了它的意图不清楚,除非得到很好的评论。

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

创建一个抽象父状态,使其余状态成为该状态的子状态。在父状态上使用 resolve 对象,因此它产生的依赖关系将可用于所有子状态。

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

An abstract state can have child states but can not get activated itself. An 'abstract' state is simply a state that can't be transitioned to. It is activated implicitly when one of its descendants are activated.

Some examples of how you might use an abstract state are:

  • To provide resolved dependencies via resolve for use by child states.

我想你想使用 $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
  });
});