路由跳转之后 部分内容没加载_Angular 之路由守卫

本文详细介绍了Angular中的4种路由守卫:canLoad、canActivate、canActivateChild和CanDeactivate,以及它们在权限限制、子路由控制和离开页面时的使用场景。通过实例展示了如何在特定场景下应用这些路由守卫,例如在登录验证、表单保存提醒等方面。
摘要由CSDN通过智能技术生成

茫茫人海中与你相遇

0a1f3ecd0ca7c01a4b1b79081a172590.png

相信未来的你不会很差

作者:何弃疗

来源:https://segmentfault.com/a/1190000020144286

路由守卫

守卫,顾名思义,必须满足一定的条件得到许可方可通行,否则拒绝访问或者重定向。Angular中路由守卫可以借此处理一些权限问题,通常应用中存储了用户登录和用户权限信息,遇到路由导航时会进行验证是否可以跳转。

4种守卫类型

按照触发顺序依次为:canload(加载)、canActivate(进入)、canActivateChild(进入子路由)和canDeactivate(离开)。
一个所有守卫都是通过的守卫类:

import { Injectable } from '@angular/core';import {
      CanActivate,  Router,  ActivatedRouteSnapshot,  RouterStateSnapshot,  CanActivateChild,  CanLoad,  CanDeactivate} from '@angular/router';import { Route } from '@angular/compiler/src/core';import { NewsComponent } from '../component/news/news.component';@Injectable({ providedIn: 'root' })export class AuthGuard implements CanActivate, CanActivateChild, CanLoad, CanDeactivate<any> {
      constructor(    private router: Router) {
      }  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
        // 权限控制逻辑如 是否登录/拥有访问权限    console.log('canActivate');    return true;  }  canDeactivate(    component: NewsComponent,    currentRoute: ActivatedRouteSnapshot,    currentState: RouterStateSnapshot,    nextState: RouterStateSnapshot) {
        console.log('canDeactivate');    return true;  }  canActivateChild() {
        // 返回false则导航将失败/取消    // 也可以写入具体的业务逻辑    console.log('canActivateChild');    return true;  }  canLoad(route: Route) {
        // 是否可以加载路由    console.log('canload');    return true;  }}
app-routing.module.ts
import { NgModule } from '@angular/core';import { Routes, RouterModule } from '@angular/router';import { ErrorComponent } from './error/error.component';import { AuthGuard } from './core/auth-guard';const routes: Routes = [  // 一般情况很少需要同时写多个守卫,如果有也是分开几个文件(针对复杂场景,否则一般使用canActivated足够)  {
        path: '',    canLoad: [AuthGuard],    canActivate: [AuthGuar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在TypeScript (TS) 和 Angular 中,路由跳转通常通过`RouterModule`模块提供的服务和指令来完成。以下是一个简单的步骤概述: 1. **安装依赖**:首先,确保你在Angular项目中已经安装了`@angular/router`模块,如果还有,可以运行`ng add @angular/router`。 2. **配置路由模块**:在`app-routing.module.ts`文件中,你需要导入`RouterModule`, `Routes`以及需要的组件。然后定义你的路由规则,如这样: ```typescript import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { HomeComponent } from './home/home.component'; import { AboutComponent } from './about/about.component'; const routes: Routes = [ { path: '', component: HomeComponent }, // 主页 { path: 'about', component: AboutComponent } // 关于页面 ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule {} ``` 3. **导航到特定路线**:在组件的HTML模板中,你可以使用`routerLink`指令来进行路由跳转,或者在组件内部使用`this.router.navigate`方法: ```html <!-- 使用routerLink --> <a routerLink="/about">关于</a> <!-- 或者在ts中动态跳转 --> <button (click)="goToAbout()">点击去关于</button> ngOnInit() { goToAbout(); } goToAbout() { this.router.navigate(['/about']); } ``` 4. **路由守卫(Optional)**:如果你想控制哪些用户、何时能访问某些路由,可以使用`CanActivate`守卫或其他类型的守卫。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值