Маршрутизация с отложенной загрузкой не работает без перезагрузки приложения. Компонент - PullRequest
0 голосов
/ 12 сентября 2018

Я использовал ленивую загрузку в моем проекте.Это работает отлично, если я положил 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>

Заранее спасибо.

...