Ленивая загрузка модуля AngularJs (v1.x) поддерживается $injector.loadNewModules
(^ v1.6.x).
Этот пример предполагается, что angularjs v1.6.x
& @uirouter/angularjs v1.x.x
Чтобы модуль Angular не находился внутри пакета приложения, он не должен быть частью дерева зависимостей приложения , это означает, что модуль angular admin
не будет импортирован и использован как часть модуля app
angular.
// router config
$stateProvider
.state('admin', {
abstract: true,
url: '/admin',
onEnter: /*@ngInject*/ (userService, $stateParams) => {
return userService.getUserFromToken($stateParams.propertyId);
},
lazyLoad: $transition$ => {
// this dynamic import tells webpack to split the admin-panel module (and it dependencies) from the app bundle
return import(/* webpackChunkName: "admin" */ '../admin-panel/admin-panel.module').then(
module => $transition$.injector().loadNewModules([module.AdminPanelModule],
);
},
})
.state('admin.main', { // inherits from admin abstract state
url: '/',
views: {
'@': {
component: 'dashboard',
},
},
});
с этой конфигурацией состояния, когда ваше приложение будет перемещаться на любую из admin
страниц (которая наследуется от абстрактного состояния admin
) onEnter
проверит, есть ли у пользователя разрешение на эту страницу, и тогда будет вызван lazyLoad
(только в первый раз) Для загрузки admin.panel.module
в модуль приложения.