这个问题通常是由于在Angular应用程序中使用了HTML5模式而不是Hash模式所致。解决此问题的一种方法是使用Hash模式,可以在app.module.ts中将路由器的配置更改为HashLocationStrategy。
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { LocationStrategy, HashLocationStrategy } from '@angular/common'; import { RouterModule, Routes } from '@angular/router';
const appRoutes: Routes = [ // Your routes here ];
@NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, RouterModule.forRoot(appRoutes) ], providers: [{ provide: LocationStrategy, useClass: HashLocationStrategy }], bootstrap: [AppComponent] }) export class AppModule { }
此外,还可以尝试在根组件中添加以下代码来解决路由问题。
export class AppComponent { constructor(private router: Router) { this.router.routeReuseStrategy.shouldReuseRoute = function() { return false; };
this.router.events.subscribe((evt) => {
if (evt instanceof NavigationEnd) {
this.router.navigated = false;
window.scrollTo(0, 0);
}
});
} }
这将防止路由重用,并确保在加载新标签页时重新加载组件。