我正在使用ui-router 我希望能够阻止任何状态转换,直到解决了承诺。
有多个状态,因此在所有状态下设置相同的resolve
属性并不是一个好主意。
承诺需要在Angular应用程序内部解决,因此在解决外部承诺后引导应用程序将无效。
我当前的解决方案依赖于调用$stateChangeStart
的{{1}}侦听器,并在解析完承诺后将其自行删除。这个解决方案有许多并发症,除非它的意图不明确,除非得到很好的评论。
那么,是否有更好的解决方案来阻止所有状态转换,直到一切都很酷?
答案 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
});
});