zoukankan      html  css  js  c++  java
  • 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
    }
    }
    如果有用请给点支持,谢谢!

     

    每一步都是一个深刻的脚印
  • 相关阅读:
    nginx配置ssl并结局TP3.2路由pathinfo
    TP3.2公共模板
    linux 上mysql慢日志查询
    RBAC流程
    Linux下安装Lnmp环境
    php操作redis命令大全
    Opencv无法调用cvCaptureFromCAM无法打开电脑自带摄像头
    c++考研复习之非递归前序中序后序遍历二叉树
    学习《Numpy基础知识》
    学习《Numpy快速教程
  • 原文地址:https://www.cnblogs.com/chzlh/p/7718773.html
Copyright © 2011-2022 走看看