阻止所有 $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
});
});
我正在使用 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
});
});