在我的应用程序中,有多个链接具有相同的路由但具有不同的查询参数和片段。
例如,我有如下链接:
.../pages/golestan/npform?fid=26270#26270
.../pages/golestan/npform?fid=26280#26280
.../pages/golestan/npform?fid=26290#26290
当我在上述路线之一并通过不同的参数导航到同一路线时,路线没有改变,但通过改变 RouteReuseStrategy 这个问题得到了解决。现在我想调用 canDeactivate 来更改路线,当我导航到其他路线时调用了 canDeactivate 但是当我通过不同的 queryParams 和片段导航到同一路线时,不会调用 canDeactivate !
const routes: Routes = [{
...
{
path: 'npform',
component: NpFormComponent,
canDeactivate: [
NpFormGuard
],
},
...
}];
@NgModule({
declarations: [
NpFormComponent
],
imports: [ ...
RouterModule.forChild(routes)
],
providers: [
NpFormGuard
]
})
export class GolestanModule { }
@Injectable({providedIn: 'root'})
export class NpFormGuard implements CanDeactivate<KoFormComponent> {
canDeactivate(
component: NpFormComponent,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree
{
return !component.webBusy;
}
}
import { Router } from '@angular/router';
constructor(private router: Router) {
this.router.routeReuseStrategy.shouldReuseRoute = (future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot) => {
const defaultReuse = (future.routeConfig === current.routeConfig);
if(future.routeConfig&&future.routeConfig.path=='npform'&&
(future.queryParams.fid||current.queryParams.fid)&&(future.queryParams.fid!=current.queryParams.fid))
return false;
return defaultReuse;
};
}