Я использовал ленивую загрузку в моем проекте.Это работает отлично, если я положил location.reload () после успешного входа в систему.Но это не правильный способ сделать это.Без использования location.reload () он только изменяет url, но не загружает дочерние модули.
Вот мой код ::
app.routing.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AuthGuardService } from 'src/app/Services/AuthenticationGuard/auth-guard.service';
export const routes: Routes = [
{ path: '', redirectTo: 'dashboard', pathMatch: 'full', canActivate: [AuthGuardService] },
{ path: 'dashboard', loadChildren: './Component/dashboard/dashboard.module#DashboardModule', canActivate: [AuthGuardService] },
{ path: 'product', loadChildren: './Component/product/product.module#ProductModule', canActivate: [AuthGuardService] },
{ path: 'login', loadChildren: './Component/login/login.module#LoginModule' },
{ path: 'manageStock', loadChildren: './Component/manage-stock/manage-stock.module#ManageStockModule', canActivate: [AuthGuardService] },
{ path: '**', redirectTo: '' }
];
@NgModule({
imports: [RouterModule.forRoot(routes, { useHash: false })],
exports: [RouterModule],
})
export class AppRoutingModule { }
AuthGuard.service.ts
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRoute } from '@angular/router';
import { JwtHelper } from 'angular2-jwt';
import { CookieService } from 'angular2-cookie/core';
import { FrameworkService } from '../FrameworkService/frameworkService.service';
@Injectable()
export class AuthGuardService implements CanActivate {
constructor(public router: Router, public frameworkService: FrameworkService, private route: ActivatedRoute, public _cookieService: CookieService) { }
canActivate(): boolean {
const jwtHelper: JwtHelper = new JwtHelper();
const token = sessionStorage.getItem('token');
if (token === null || token === undefined || token === '' || token === 'null') {
this.router.navigate(['login']);
this.frameworkService.baseService.login = false;
return false;
} else {
if (token && !jwtHelper.isTokenExpired(token)) {
this.frameworkService.baseService.login = true;
return true;
}
}
}
}
В моем компоненте входа в систему после успешного входа я перехожу на панель инструментов с помощью this.router.navigateByUrl('/')
.он успешно отправил его на панель инструментов, и все в порядке, но когда я щелкнул по продукту, модуль продукта не загружается, если я обновляю свою страницу, то после того, как я щелкнул по продукту, он работает нормально.
Один из детейСлужба маршрутизации
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { ProductMasterComponent } from './productMaster/productMaster.component';
import { ProductDetailsComponent } from './productDetails/productDetails.component';
import { AuthGuardService } from 'src/app/Services/AuthenticationGuard/auth-guard.service';
const routes: Routes = [
{ path: '', component: ProductMasterComponent },
{ path: 'productDetails/:id', component: ProductDetailsComponent, canActivate: [AuthGuardService] }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class ProductRoutingModule { }
РЕДАКТИРОВАТЬ
Нажмите на продукт, как вы просили:
<li>
<a asp-controller="Product" routerLink="/product">
<i class="fa fa-table"></i> Products
</a>
</li>
Заранее спасибо.