app-routing.module.ts
hash-type-guard.service.ts
这个不知道是不是angular 中的bug还是有意为之,但是这无疑是混乱的,所以我放弃了canActivateChild
import { NgModule } from '@angular/core';
import { Router, Routes, RouterModule, PreloadAllModules, NavigationStart } from '@angular/router';
import { HomeComponent } from './layout/home/home.component';
import { DashboardComponent } from './routes/dashboard/dashboard.component';
import { ProductComponent, ChildComponent } from './routes/product/product.component';
// CanDeactivate
import { UnsaveGuard } from './guard/unsave-guard.service';
import { ProductResolve } from './guard/product-resolve.service';
// CanActivate
import { HashTypeGuard } from './guard/hash-type-guard.service';
const routes: Routes = [
{
path: '',
component: HomeComponent,
// canActivate: [HashTypeGuard],
canActivateChild: [ HashTypeGuard ],
children: [
{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },
{
path: 'task',
loadChildren: () => import('./routes/task/task.module').then(m => m.TaskModule),
// canActivate: [HashTypeGuard],
},
{ path: 'inherit',
loadChildren: () => import('./routes/inherit/inherit.module').then(m => m.InheritModule),
// canActivate: [HashTypeGuard],
},
{ path: 'cesiums',
loadChildren: () => import('./routes/cesiums/cesium.module').then(m => m.CesiumModule)
// ,canActivate: [HashTypeGuard],
},
{ path: 'webrtc',
loadChildren: () => import('./routes/webrtc/webrtc.module').then(m => m.WebrtcModule)
// ,canActivate: [HashTypeGuard],
},
{ path: 'dashboard', component: DashboardComponent,
// canActivate: [HashTypeGuard],
},
{
path: 'a',
pathMatch: 'prefix',
children: [
// { path:'**', pathMatch: 'prefix',redirectTo: 'dashboard'}
{ path:'**', component: ChildComponent},
]
},
{
path: 'product/:id',
component: ProductComponent,
resolve: {
product: ProductResolve
}
},
{
path: 'order',
loadChildren: () => import('./routes/order/order.module').then(m => m.OrderModule),
canDeactivate: [UnsaveGuard]
,
// canActivate: [HashTypeGuard],
data: {val: '005'}
},
{ path: '**', redirectTo: 'home' }
]
}
];
@NgModule({
imports: [RouterModule.forRoot(routes, {
useHash: true,
preloadingStrategy: PreloadAllModules,
// enableTracing: true,
// onSameUrlNavigation: 'reload'
})],
// providers: [UnsaveGuard],
exports: [RouterModule]
})
export class AppRoutingModule {
}
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild, CanLoad } from '@angular/router';
@Injectable({providedIn: 'root'})
export class HashTypeGuard implements CanActivate, CanActivateChild, CanLoad {
canLoad(route: import("@angular/router").Route, segments: import("@angular/router").UrlSegment[]): boolean {
this.val++;
console.log('canload'+this.val);
return true;
}
val = 0;
constructor(
private router: Router
) {}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if(route.url.length) {
this.val++;
if(this.val%2){
this.router.navigate([state.url], { replaceUrl: true });
return false;
}else{
console.log(this.val);
return true;
}
}
return true;
}
}