IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> angular学习总结-路由和路由守卫 -> 正文阅读

[JavaScript知识库]angular学习总结-路由和路由守卫

通过命令新建页面news:

ng g page news

会在src/app目录下自动生成以下文件,并更新app-routing.module.ts总路由文件。
在这里插入图片描述
再来看看app-routing.module.ts文件,已自动配置好了新页面的路由。
在这里插入图片描述
从路由可以看出,我创建了两个页面,一个home,一个news。
现在想从home页面跳转到news页面去,并携带参数,该怎么传呢?

路由跳转和传参

方式一:

设定:home页面跳转news页面需要传递参数empNo。

第一步:修改路由。

src/app/app-routing.module.ts

{
    path: 'news/:empNo',
    loadChildren: () => import('./news/news.module').then( m => m.NewsPageModule)
  }
第二步:跳转路由传参。

src/app/home/home.page.ts

clickMe() {
    console.log('点我跳转');
    this.router.navigate(['/news','9295'])
  }
第二步:目标页面接收参数。

src/app/news/news.page.ts

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-news',
  templateUrl: './news.page.html',
  styleUrls: ['./news.page.scss'],
})
export class NewsPage implements OnInit {

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

  ngOnInit() {
    const routeParams=this.route.snapshot.params
    console.log(routeParams)
  }

}

打印结果:

{empNo: '3'}

方式二:

设定:home页面跳转news页面需要传递参数对象。

第一步:跳转路由传参。

src/app/home/home.page.ts

 clickMe() {
    console.log('点我跳转');
    this.router.navigate(['/news'],{
      queryParams:{
        name:'张三',
        id:'1234567801',
      }
    })
  }
第二步:目标页面接收参数。

src/app/news/news.page.ts

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-news',
  templateUrl: './news.page.html',
  styleUrls: ['./news.page.scss'],
})
export class NewsPage implements OnInit {

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

  ngOnInit() {
    const routeParams=this.route.snapshot.queryParams
    console.log(routeParams)
  }

}

打印结果:

{name: '张三', id: '1234567801'}

路由守卫

路由守卫会对路由跳转进行拦截。

像移动端手机物理返回键的监听控制,可以通过路由守卫来控制要返回到哪个路由页面。
还常用这些场景:

1.该用户可能无权导航到目标组件。
2.可能用户得先登录(认证)。
3.在显示目标组件前,你可能得先获取某些数据。
4.在离开组件前,你可能要先保存修改。
5.你可能要询问用户:你是否要放弃本次更改,而不用保存它们?

路由器可以支持多种守卫接口:

  • 用CanActivate来处理导航到某路由的情况。

  • 用CanActivateChild来处理导航到某子路由的情况。

  • 用CanDeactivate来处理从当前路由离开的情况.

  • 用Resolve在路由激活之前获取路由数据。

  • 用CanLoad来处理异步导航到某特性模块的情况。

第一步:执行命令,生成路由守卫。

ng g guard home

然后就会出现选择器,选择你需要的守卫接口。
在这里插入图片描述
然后就生成home.guard.ts文件。
在这里插入图片描述

第二步:配置路由守卫。

配置home-routing.module.ts路由守卫。
在这里插入图片描述

第三步:操作路由守卫。

我用的比较多的是canDeactivate,从当前路由离开时会进行触发。

1.先对home.guard.ts进行配置。

在这里插入图片描述

2.在home.page.ts中配置canLeave方法。

 canLeave(){
    console.log('--canLeave--')
    return false
  }

在这里插入图片描述
效果:
点击页面跳转按钮,
页面未跳转,并打印
–canLeave–

说明路由守卫控制成功。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:27:11  更:2022-03-04 15:28:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:05:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码