• angular路由详解六(路由守卫)


    路由守卫

    CanActivate: 处理导航到某个路由的情况。

    CanDeactivate:处理从当前路由离开的情况。

    Resole:在路由激活之前获取路由数据。

    1.CanActivate: 处理导航到某个路由的情况。

    新建一个文件PermissionGuard.ts

    import {CanActivate,
    ActivatedRouteSnapshot,
    RouterStateSnapshot
    } from '@angular/router';
     
    export class PermissionGuard   implements CanActivate{
     
      canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):boolean{
      
      return false;
      }
    }
     
    在路由配置中配置
    import { PermissionGuard   } from './../PermissionGuard';


    const routes: Routes = [
      {
      path:'message',
      component: MessageComponent,
      canActivate:[PermissionGuard],
      children:[
      {
      path:'messgeMenu',
      component: MessageMenuComponent,
      children:[
      {
      path:'list',
      component: MessageListComponent
      },{
      path:'',
      component: MessageDetailComponent
      }
      ]
    }
    ]
    }
    ]
     
    在对应的Xxxmodule.ts文件中导入
    import { PermissionGuard   } from './../PermissionGuard';
    providers:[PermissionGuard]
     
    2.CanDeactivate:处理从当前路由离开的情况
     
    新建一个文件focusGuard.ts
    import { CanDeactivate } from "@angular/router";
    import { XxxComponent } from ''./../xxxComponent";
     
    export class FocusGuard  implements CanDeactivate <XxxComponent > {
     
      canDeactivate(component: XxxComponent ){
      
        if (component.isFoucs()){
        return true;
        }else {
        return false;
        }  
      }
    }
     
    在路由配置中配置
    import { FocusGuard  } from './../PermissionGuard';
     
    canDeactivate:[FocusGuard ],
     
    在对应的Xxxmodule.ts文件中导入
    import { FocusGuard  } from './../focusGuard';
    //其实在实例化对象
    providers:[FocusGuard]
     
     3.Resole:在路由激活之前获取路由数据
     
    新建一个stock-resole.service.ts文件
     
    import { Injectable } from '@angular/core';
    import {
    Resolve,
    ActivatedRouteSnapshot,
    RouterStateSnapshot
    } from '@angular/router';
    //导入股票数据模块
    import { Stock } from './stock';
     
    import { Observable } from 'rxjs/Observable';

    @Injectable()

    export class StockResolveService implements Resolve<Stock>{

      resolve(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Stock | Observable<Stock> | Promise<Stock>{
        console.log(new Stock(1,"IBM"));
     
        return new Stock(1,"IBM");
      }
    }
     
    在xxx.module.ts文件中注入
     
    import { StockResolveService } from './../stock-resolve.service';
     
    providers:[StockResolveService]
     

    在路由中配置

    import { StockResolveService } from './../stock-resolve.service';
    const mineRoutes: Routes = [
    {
    path:'mine',
    component: MineComponent,
    children: [
     
    {path:'mineMenu',component: MineMenuComponent},
    {path:'mineList', component: MineListComponent} 
    ],
    resolve:{
    stock: StockResolveService
    }
    }
    如果有用请给点支持,谢谢!

     

    每一步都是一个深刻的脚印
  • 相关阅读:
    MQTT Retained消息和LWT和Keep Alive(转)
    ant design 1.x中走马灯记录
    通过Array构造指定长度的数组
    Unicode编码与中文的相互转换
    在谷歌控制台调试代码如何换行
    辅助工具
    vue中扩展函数,除了原有的事件中传的参数增加自己传的参数
    使用allparis正交法,生成测试用例
    vue 字写的tab切换两个列表,在IOS上出现列表数据错乱的问题。
    Redis中的原子操作(2)redis中使用Lua脚本保证命令原子性
  • 原文地址:https://www.cnblogs.com/chzlh/p/7718773.html
Copyright © 2020-2023  润新知