Angular ui-router和ocLazyLoad
情境:
我有一些角度模块,如:
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
本文经用户投稿或网站收集转载,如有侵权请联系本站。