javascript - oclazyloadprovider - Ui-router angular y ocLazyLoad
angular oclazyload (1)
Guión:
Tengo algunos módulos angulares como:
angular.module(''app'', [''app.core'', ''app.views'']); // not lazy load
Cada módulo en app.views
utiliza un RouterUtil para registrar su propia ruta, como:
$stateProvider.state(''state name'', {/* some configs here */});
Este RouterUtil también tiene un método para acceder a todos los estados registrados (utilizado para crear un menú dinámico).
Y estoy usando ocLazyLoad , solo para cargar un módulo externo. Cuando la página se está cargando, ocLazyLoad realizará una solicitud a otros js con algunos módulos angulares y luego agregará este módulo al entorno real.
El problema ocurre cuando voy a una página de este módulo externo y trato de actualizar la página:
Que esta pasando:
- Angular comienza y registra algunos $ estados
- ocLazyLoad inicia una solicitud para el módulo externo
- ui-routes intenta analizar la URL real, y se da cuenta de que no hay estado para esta URL y redirige al usuario a la página predeterminada (de lo contrario)
- ocLazyLoad finaliza la solicitud y agrega todos los módulos nuevos al entorno angular. En este momento tenemos un estado con la URL solicitada (la misma que antes de la actualización)
¿Puedo hacer ui-router esperar la solicitud ocLazyLoad antes de comprobar si esta es una URL registrada?
desea utilizar deferIntercept()
para retrasar a ui-router de ver la URL.
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