【发布时间】:2019-08-08 10:56:56
【问题描述】:
在我的 Angular(v7) 应用程序中,尽管浏览器地址栏中的 URL 已更改,但单击路由器链接不会加载相关组件。
一旦页面重新加载,点击浏览器的刷新按钮,路由器链接就会开始按预期工作。我已确认 Google Chrome 和 IE 中的行为。
您能否告诉我我做错了什么以及在哪里?我在下面分享了我的代码的相关部分。
应用模块和路由器设置
import {
RouterModule,
Routes
} from "@angular/router";
...
const appRoutes: Routes = [{
path: 'login',
component: LoginComponent
},
{
path: 'bookings',
component: BookingsComponent,
canActivate: [AuthGuard]},
{
path: 'rates',
component: RatesComponent,
canActivate: [AuthGuard]},
{
path: '',
redirectTo: '/bookings',
pathMatch: 'full',
canActivate: [AuthGuard]
},
{
path: '**',
component: PageNotFoundComponent
},
];
@NgModule({
imports: [
RouterModule.forRoot(appRoutes, {
enableTracing: false
}),
BrowserModule,
...
]
})
export class AppModule {}
HTML 模板中的路由器链接
<a class="side-nav-link" routerLink="/rates" routerLinkActive="active">Rates</a>
<a class="side-nav-link" routerLink="/bookings" routerLinkActive="active">Bookings</a>
Auth Guard,如果相关
@Injectable({
providedIn: "root"
})
export class AuthGuard implements CanActivate {
constructor(private router: Router, private authService:AuthService) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (this.authService.loggedIn) {
return true;
}
this.router.navigate( ['/login'], { queryParams: { returnUrl: state.url }});
return false;
}
}
【问题讨论】:
-
你还没有为
rates和bookings定义路由 -
@ashishpal 我的实际代码中有这些路线。我也在问题的代码 sn-p 中添加了相同的内容。
-
你能把
enableTracing设置为true并添加一些日志吗? -
不要在同一个组件中使用多个路由器插座..使用路由子方法..它会工作..
标签: angular typescript angular-routing