angular之RouterLink花式跳转

本文详细介绍了Angular中routerLink的四种使用方法及其特点。包括绝对路径、路由名字、相对路径及当前路径加名的方式,并通过实例说明了每种写法的具体表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

routerLink本身支持两种写法:
<a routerLink="detail">
</a>

<a [routerLink]="['detail']">
</a>
复制代码
routerLink的值有哪些写法,又有什么区别呢?

假设当前路由为

`http://localhost:4200/#/doc/license`
复制代码
  • 写法1 : 绝对路径 / + 路由名字
 <!--跳到 http://localhost:4200/#/doc/license -->
 <a  [routerLink]="['/doc/demo']" >跳呀跳</a>
 
  <!--跳到 http://localhost:4200/#/demo -->
  <a  [routerLink]="['/demo']" >跳呀跳</a>
复制代码

那么url是 http://localhost:4200/#/doc/demo上跳转,即 http://localhost:4200/#/ + 你要跳转的绝对路径

  • 写法2 : 一个路由名字 路由名字
 <a  [routerLink]="['demo']" >跳呀跳</a>
复制代码

那么url是http://localhost:4200/#/doc/license/(demo),即http://localhost:4200/#/doc/license + 你要跳转的绝对路径,这时候它会给你的路由加些东西变成 /(demo),跳转不了。

  • 写法3 :相对路径 ../路由名字
 <a  [routerLink]="['../demo']" >跳呀跳</a>
复制代码

那么url是 http://localhost:4200/#/doc/demo,即 http://localhost:4200/#/doc + 你要跳转的相对路径。它会从上一级开始寻找。

  • 写法4 : ./路由名字, 即现在的路由+你写的要跳去的路由
 <a  [routerLink]="['./demo']" >跳呀跳</a>
复制代码

那么url是 http://localhost:4200/#/doc/license/demo上,即 http://localhost:4200/#/doc/license + 你要跳转的相对路径。它会从当前路由的下一级开始寻找此匹配的路由进行跳转。

| 更多API用法更新于 github

### 实现 Angular 中 `routerLink` 跳转前的拦截 为了实现在点击 `routerLink` 前进行跳转拦截,在 Angular 应用程序中通常会采用路由守卫机制。具体来说,可以创建一个 CanActivate 守卫来决定目标路径是否可激活。 #### 创建 CanActivate 守卫 首先定义一个新的服务作为路由守卫: ```typescript import { Injectable } from '@angular/core'; import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router'; import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class AuthGuard implements CanActivate { constructor(private router: Router) {} canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree { // 进行权限校验逻辑, 返回 true 或 false 表示允许/拒绝访问 const isAuthenticated = /* 权限判断 */; if (!isAuthenticated) { // 如果未通过鉴权,则重定向到登录页面或其他指定位置 this.router.navigate(['/login']); return false; } return true; } } ``` 此代码片段展示了如何构建一个简单的授权守卫[^2]。 接着需注册该守卫并将其应用至特定路由配置上: ```typescript const routes: Routes = [ { path: '', pathMatch: 'full', redirectTo: '/layout' }, { path: 'login', loadChildren: () => import('./pages/login/login.module').then(m => m.LoginModule) }, { path: 'layout', loadChildren: () => import('./pages/layout/layout.module').then(m => m.LayoutModule), canActivate: [AuthGuard] // 将守卫应用于 layout 路由下所有子路由 } ]; ``` 上述设置确保了当用户尝试进入受保护区域时会被自动检查是否有足够的权限;如果没有则被引导回登录界面[^3]。 对于更复杂的身份验证需求,可以根据实际情况调整 `canActivate` 方法内的业务逻辑,比如引入额外的服务来进行异步请求获取用户的最新状态等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值