Angular ui-router和ocLazyLoad

Angular ui-router和ocLazyLoad,第1张

情境:

我有一些角度模块,如:

angular.module('app', ['app.core', 'app.views']); // not lazy load

app.views下的每个模块都使用RouterUtil来注册自己的路由,例如:

$stateProvider.state('state name', {/* some configs here */});

此RouterUtil还有一种访问所有已注册状态的方法(用于创建动态菜单)。

我正在使用ocLazyLoad,只是为了加载外部模块。 加载页面时,ocLazyLoad将使用某些角度模块对其他js执行请求,然后将此模块添加到实际的环境

当我转到此外部模块的页面时,问题就出现了,并尝试刷新页面:

发生了什么:

  • Angular启动并注册一些$ states
  • ocLazyLoad启动对外部模块的请求
  • ui-routes尝试解析实际的URL,并意识到此URL没有状态并将用户重定向到默认(否则)页面
  • ocLazyLoad完成请求并将所有新模块添加到angular enviroment 。此时我们有一个具有请求URL的状态(与刷新前相同)

在检查这是否是注册的URL之前,我可以执行ui-router等待ocLazyLoad请求吗?

最佳答案:

1 个答案:

答案 0 :(得分:0)

您想使用deferIntercept(),以便延迟ui-router观看网址。

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

... ocLazyLoad stuff

app.run(function($urlRouter) { 
  ocLazyLoadPromise.then(function() { urlRouter.listen(); }); 
});

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

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复