Angular路由器.navigate在canActivate()中不适用于子路由
创始人
2024-10-28 02:32:57
0

这是因为当使用navigate方法时,路由守卫会阻止导航到未激活的子路由。为了解决这个问题,我们需要使用路由器的navigateByUrl方法来导航到子路由。

以下是示例代码:

import { Router, ActivatedRoute } from '@angular/router';
import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';

@Injectable()
export class AuthGuard implements CanActivate {

  constructor(private router: Router, private route: ActivatedRoute) {}

  canActivate() {
    if (isAuthenticated()) {
      return true;
    } else {
      // Navigate to login page with the current URL as a query string parameter
      this.router.navigateByUrl('/login?returnUrl=' + this.route.snapshot.url.join('/'));
      return false;
    }
  }
}

在这个示例中,我们使用了navigateByUrl方法来导航到/login子路由,同时将当前URL作为查询字符串参数一起传递。这样,用户在成功登录后将返回之前的URL。

我们需要确保在定义路由时将子路由的定义放在父路由的后面,以确保子路由成功地激活。例如:

const appRoutes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'login', component: LoginComponent },
  { path: 'dashboard', component: DashboardComponent, canActivate: [AuthGuard], children: [
    { path: 'profile', component: ProfileComponent }
  ]},
  { path: '**', component: PageNotFoundComponent }
];

@NgModule({
  imports: [
    RouterModule.forRoot(appRoutes)
  ]
})
export class AppRoutingModule { }

在这个例子中,子路由/profile是由父路由/dashboard激活的。

相关内容

热门资讯

透视挂透视"poke... 透视挂透视"pokemmo脚本辅助下载"wepoker怎么挂底牌(都是是真的辅助app)-哔哩哔哩1...
针对"wpk透视辅助... 针对"wpk透视辅助靠谱吗"wepoker透视脚本(竟然是真的辅助app)-哔哩哔哩wpk透视辅助靠...
透视脚本"sohoo... 透视脚本"sohoo poker辅助"德普软件(竟然真的有辅助软件)-哔哩哔哩1、让任何用户在无需s...
透视安卓版"aapo... 您好,aapoker怎么设置提高好牌几率这款游戏可以开挂的,确实是有挂的,需要了解加去威信【4852...
出现新变化"wepo... 出现新变化"wepoker有插件吗"wejoker透视方法(竟然真的有辅助修改器)-哔哩哔哩运wep...
透视真的"约局吧如何... 透视真的"约局吧如何查看是否有挂"wepoker的辅助器(都是存在有辅助下载)-哔哩哔哩运约局吧如何...
为了进一步"hhpo... 为了进一步"hhpoker德州作必弊"pokernow辅助工具(都是真的有辅助下载)-哔哩哔哩hhp...
透视透视"wepok... 透视透视"wepoker插件功能辅助器"aapoker万能辅助器(一直真的有辅助修改器)-哔哩哔哩1...
透视玄学"pokem... 透视玄学"pokemmo辅助官网"wepoker免费脚本咨询(总是是有辅助软件)-哔哩哔哩1、wep...
目前来看"wepok... 目前来看"wepoker免费脚本咨询"wepoker公共底牌(确实是有辅助插件)-哔哩哔哩1.wep...