Prefetching lazy loaded modules produces an error while navigating.
To reduce the loading time of the lazy loaded modules, I had to enable prefetching of lazy loaded modules. I noticed an error which occurred as a result of it. Whenever i tried navigating to a different route before the notify info message is closed, it resulted in freezing of the UI after navigating to the new route and threw an error in the console.
Enabled preloading of modules.
9 Answer(s)
-
0
Hi @Jorahealth
Could you also share your AspNet Zero version ?
Thanks,
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Its v8.9.2.0
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi @Jorahealth,
I couldn't reproduce this problem. Could you try to upgrade your Angular version and try again ? If you can't solve this problem, is it possible to send your project to [email protected] ?
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Sending the steps needed to reproduce the issue from ver 8.9.2 downloaded code.
Asp.net zero version used: 8.9.2
Codes that were modified from downloaded version 8.9.2 to reproduce the issue.
- Added a preloading strategy to the root-routing.module.ts
2.) roles.component.ts - added a router navigate to users page.
Steps to Reproduce the issue
- Navigate to the roles page from the side after running the solution.
- Create a role and save.
- Delete the newly created role from the list by clicking on the delete option from the actions. We are automatically redirected to users page after successful delete.(default code modified to reproduce the issue)

Issue - After deleting a created role, we are redirected to the users page.The application hangs, throws error in console and successfully deleted message does not hide.
Attaching the modified files.....
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
root-routing.module.ts
import { NgModule } from '@angular/core'; import { NavigationEnd, Router, RouterModule, Routes, PreloadAllModules } from '@angular/router'; import { AppUiCustomizationService } from '@shared/common/ui/app-ui-customization.service'; const routes: Routes = [ { path: '', redirectTo: '/app/main/dashboard', pathMatch: 'full' }, { path: 'account', loadChildren: () => import('account/account.module').then(m => m.AccountModule), //Lazy load account module data: { preload: true } }, { path: '**', redirectTo: '/app/main/dashboard' } ]; @NgModule({ imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })], exports: [RouterModule], providers: [] }) export class RootRoutingModule { constructor( private router: Router, private _uiCustomizationService: AppUiCustomizationService) { router.events.subscribe((event: NavigationEnd) => { setTimeout(() => { this.toggleBodyCssClass(event.url); }, 0); }); } toggleBodyCssClass(url: string): void { if (url) { if (url === '/') { if (abp.session.userId > 0) { this.setAppModuleBodyClassInternal(); } else { this.setAccountModuleBodyClassInternal(); } } if (url.indexOf('/account/') >= 0) { this.setAccountModuleBodyClassInternal(); } else { this.setAppModuleBodyClassInternal(); } } } setAppModuleBodyClassInternal(): void { let currentBodyClass = document.body.className; let classesToRemember = ''; if (currentBodyClass.indexOf('m-brand--minimize') >= 0) { classesToRemember += ' m-brand--minimize '; } if (currentBodyClass.indexOf('m-aside-left--minimize') >= 0) { classesToRemember += ' m-aside-left--minimize'; } if (currentBodyClass.indexOf('m-brand--hide') >= 0) { classesToRemember += ' m-brand--hide'; } if (currentBodyClass.indexOf('m-aside-left--hide') >= 0) { classesToRemember += ' m-aside-left--hide'; } if (currentBodyClass.indexOf('swal2-toast-shown') >= 0) { classesToRemember += ' swal2-toast-shown'; } document.body.className = this._uiCustomizationService.getAppModuleBodyClass() + ' ' + classesToRemember; } setAccountModuleBodyClassInternal(): void { let currentBodyClass = document.body.className; let classesToRemember = ''; if (currentBodyClass.indexOf('swal2-toast-shown') >= 0) { classesToRemember += ' swal2-toast-shown'; } document.body.className = this._uiCustomizationService.getAccountModuleBodyClass() + ' ' + classesToRemember; } getSetting(key: string): string { return abp.setting.get(key); } }Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
role.component.ts
import { Component, Injector, ViewChild, OnInit } from '@angular/core'; import { appModuleAnimation } from '@shared/animations/routerTransition'; import { AppComponentBase } from '@shared/common/app-component-base'; import { RoleListDto, RoleServiceProxy, PermissionServiceProxy, FlatPermissionDto } from '@shared/service-proxies/service-proxies'; import { Table } from 'primeng/table'; import { CreateOrEditRoleModalComponent } from './create-or-edit-role-modal.component'; import { EntityTypeHistoryModalComponent } from '@app/shared/common/entityHistory/entity-type-history-modal.component'; import * as _ from 'lodash'; import { finalize } from 'rxjs/operators'; import { PermissionTreeModalComponent } from '../shared/permission-tree-modal.component'; import { Router } from '@angular/router'; @Component({ templateUrl: './roles.component.html', animations: [appModuleAnimation()] }) export class RolesComponent extends AppComponentBase implements OnInit { @ViewChild('createOrEditRoleModal', { static: true }) createOrEditRoleModal: CreateOrEditRoleModalComponent; @ViewChild('entityTypeHistoryModal', { static: true }) entityTypeHistoryModal: EntityTypeHistoryModalComponent; @ViewChild('dataTable', { static: true }) dataTable: Table; @ViewChild('permissionFilterTreeModal', { static: true }) permissionFilterTreeModal: PermissionTreeModalComponent; _entityTypeFullName = 'Decisively.Authorization.Roles.Role'; entityHistoryEnabled = false; constructor( injector: Injector, private _roleService: RoleServiceProxy, private _router: Router ) { super(injector); } ngOnInit(): void { this.setIsEntityHistoryEnabled(); } private setIsEntityHistoryEnabled(): void { let customSettings = (abp as any).custom; this.entityHistoryEnabled = customSettings.EntityHistory && customSettings.EntityHistory.isEnabled && _.filter(customSettings.EntityHistory.enabledEntities, entityType => entityType === this._entityTypeFullName).length === 1; } getRoles(): void { this.primengTableHelper.showLoadingIndicator(); let selectedPermissions = this.permissionFilterTreeModal.getSelectedPermissions(); this._roleService.getRoles(selectedPermissions) .pipe(finalize(() => this.primengTableHelper.hideLoadingIndicator())) .subscribe(result => { this.primengTableHelper.records = result.items; this.primengTableHelper.totalRecordsCount = result.items.length; this.primengTableHelper.hideLoadingIndicator(); }); } createRole(): void { this.createOrEditRoleModal.show(); } showHistory(role: RoleListDto): void { this.entityTypeHistoryModal.show({ entityId: role.id.toString(), entityTypeFullName: this._entityTypeFullName, entityTypeDescription: role.displayName }); } deleteRole(role: RoleListDto): void { let self = this; self.message.confirm( self.l('RoleDeleteWarningMessage', role.displayName), this.l('AreYouSure'), isConfirmed => { if (isConfirmed) { this._roleService.deleteRole(role.id).subscribe(() => { this.getRoles(); abp.notify.success(this.l('SuccessfullyDeleted')); this._router.navigate(['app/admin/users']); }); } } ); } }Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi @Jorahealth
I could not reproduce it. Did you check that https://support.aspnetzero.com/QA/Questions/9512/Pre-fetching-lazy-loaded-modules-produces-an-error-while-navigating#answer-6a1264fe-8112-e850-2d51-39f736ca8dff. If it does not solve your problem, you can send your project to [email protected] and we can try to solve the problem for you.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
I sent the project a few days back and got no response? Could you please advise?
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi @Jorahealth
Did you get a response via email ? If not, did you solve this problem ?
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image)




