Vue Router activated deactivated 路由守卫

6.12.activated deactivated

activateddeactivated是路由组件所独有的两个钩子,用于捕获路由组件的激活状态具体使用

  1. activated路由组件被激活时触发
  2. deactivated路由组件失活时触发

在这里插入图片描述

src/pages/News.vue

<template><ul><li :style="{opacity}">欢迎学习vue</li><li>news001 <input type="text"></li></li><li>news002 <input type="text"></li></li><li>news003 <input type="text"></li></li></ul>
</template><script>export default {name: "News",data(){return {opacity:1}},activated() {console.log('News组件被激活了');this.timer = setInterval(() => {this.opacity -= 0.01;if(this.opacity <= 0) this.opacity = 1},16)},deactivated() {console.log('News组件失活了');clearInterval(this.timer)}}
</script>

6.13.路由守卫

作用:对路由进行权限控制

分类:全局守卫、独享守卫、组件内守卫 全局守卫

  1. 全局守卫
    1. meta路由源信息
      // 全局前置守卫:初始化时、每次路由切换前执行
      router.beforeEach((to,from,next) => {console.log('beforeEach',to,from);if(to.meta.isAuth){ // 判断当前路由是否需要进行权限控制if(localStorage.getItem('school') === 'atguigu'){ // 权限控制的具体规则next(); // 放行} else { alert('暂无权限查看');}} else { next(); // 放行 }
      })// 全局后置守卫:初始化时、每次路由切换后执行
      router.afterEach((to,from) => {console.log('afterEach',to,from);if(to.meta.title) { document.title = to.meta.title;//修改网页的title } else { document.title = 'vue_test' ;}
      })
      
  2. 独享守卫
    beforeEnter(to,from,next){console.log('beforeEnter',to,from);if(localStorage.getItem('school') === 'atguigu') { next();} else { alert('暂无权限查看');}
    })
    
  3. 组件内守卫
    //进入守卫:通过路由规则,进入该组件时被调用 
    beforeRouteEnter (to, from, next) {... next()},//离开守卫:通过路由规则,离开该组件时被调用 
    beforeRouteLeave (to, from, next) {... next()},
    

6.13.1.全局路由守卫

src/router/index.js

import VueRouter from 'vue-router';// 引入组件
import About from '../pages/About';
import Home from '../pages/Home';
import News from '../pages/News';
import Message from '../pages/Message';
import Detail from '../pages/Detail';// 创建并暴露一个路由器
const router =  new VueRouter({routes:[{name:'guanyu',path:'/about',component:About,meta:{title:'关于'}},{name:'zhuye',path:'/home',component:Home,meta:{title:'主页'},children: [{name:'xinwen',path:'news',component:News,meta:{isAuth:true,title:'新闻'}},{name:'xiaoxi',path:'message',component:Message,meta:{isAuth:true,title:'消息'},children: [{name:'Detail', // name配置项为路由命名path:'detail', // 使用占位符声明接收params参数component:Detail,meta:{isAuth:true,title:'详情'},props($route){ // 这里可以使用解构赋值return {id: $route.params.id,title: $route.params.title}}}]}]}]
})// 全局前置路由守卫————初始化的时候、每次路由切换之前被调用
router.beforeEach((to,from,next) => {console.log('前置路由守卫',to,from);if(to.meta.isAuth){if(localStorage.getItem('school')==='atguigu'){next();} else{alert('学校名不对,无权限查看!');}} else {next();}
});// 全局后置路由守卫————初始化的时候被调用、每次路由切换之后被调用
router.afterEach((to,from) => {console.log('后置路由守卫',to,from);document.title = to.meta.title || '硅谷系统';
});export  default router;

6.13.2.独享路由守卫

src/router/index.js

import VueRouter from 'vue-router';// 引入组件
import About from '../pages/About';
import Home from '../pages/Home';
import News from '../pages/News';
import Message from '../pages/Message';
import Detail from '../pages/Detail';// 创建并暴露一个路由器
const router =  new VueRouter({routes:[{name:'guanyu',path:'/about',component:About,meta:{title:'关于'}},{name:'zhuye',path:'/home',component:Home,meta:{title:'主页'},children: [{name:'xinwen',path:'news',component:News,meta:{isAuth:true,title:'新闻'},// 🔴独享守卫,特定路由切换之后被调用beforeEnter(to,from,next){console.log('前置路由守卫',to,from);if(to.meta.isAuth){if(localStorage.getItem('school')==='atguigu'){next();} else{alert('学校名不对,无权限查看!');}} else {next();}}},{name:'xiaoxi',path:'message',component:Message,meta:{isAuth:true,title:'消息'},children: [{name:'Detail', // name配置项为路由命名path:'detail', // 使用占位符声明接收params参数component:Detail,meta:{isAuth:true,title:'详情'},props($route){ // 这里可以使用解构赋值return {id: $route.params.id,title: $route.params.title}}}]}]}]
})// 全局前置路由守卫————初始化的时候、每次路由切换之前被调用
// router.beforeEach((to,from,next) => {
//     console.log('前置路由守卫',to,from);
//     if(to.meta.isAuth){
//         if(localStorage.getItem('school')==='atguigu'){
//             next();
//         } else{
//             alert('学校名不对,无权限查看!');
//         }
//     } else {
//         next();
//     }
// });// 全局后置路由守卫————初始化的时候被调用、每次路由切换之后被调用
// router.afterEach((to,from) => {
//     console.log('后置路由守卫',to,from);
//     document.title = to.meta.title || '硅谷系统';
// });export  default router;

6.13.3.组件内路由守卫

src/pages/About.vue

<template><h2>我是About的内容</h2>
</template><script>export default {name: "About",// 通过路由规则,进入该组件时被调用beforeRouteEnter (to, from, next) {console.log('About--beforeRouteEnter', to, from);if(localStorage.getItem('school') === 'atguigu') {next();} else {alert('学校名不对,无权限查看!');}},// 通过路由规则,离开该组件时被调用beforeRouteLeave (to, from, next) {console.log('About--beforeRouteLeave', to, from) ;next();}}
</script>

6.14.路由器的两种工作模式

  1. 对于一个url来说,什么是hash值? #及其后面的内容就是hash值
  2. hash值不会包含在HTTP请求中,即:hash值不会带给服务器
  3. hash模式
    1. 地址中永远带着#号,不美观
    2. 若以后将地址通过第三方手机app分享,若app校验严格,则地址会被标记为不合法
    3. 兼容性较好
  4. history模式
    1. 地址干净,美观
    2. 兼容性和hash模式相比略差
    3. 应用部署上线时需要后端人员支持,解决刷新页面服务端404的问题
const router = new VueRouter({ mode:'history', routes:[...] 
})export default router;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/45.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot定时任务

目录 1.概述 2.Spring Boot定时任务 2.1.快速使用 2.2.cron表达式 3.业务示例 3.1.业务描述 3.2.业务实现 4.实现原理 5.自定义线程池 1.概述 在某些业务场景中&#xff0c;需要定时执行一些任务&#xff0c;有可能是定时统计然后生成报表&#xff0c;有可能是定时发…

一个好看美观的登录注册界面的实现

序言&#xff1a;之前介绍那个博客&#xff0c;然后自己搞了这个界面。最近有人和我要&#xff0c;把代码给大家贴出来&#xff0c;提供参考。 首先是这个界面哈 <!DOCTYPE html> <html lang"en"> <head><script src"../static/lib/jquer…

mac本地创建ssh key连接github

起因 今天克隆自己github上面的笔记到新电脑上&#xff0c;用http连接进行克隆&#xff0c;然后要我输入账号密码&#xff0c;输入完报了个提示“remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.”…

XHbuilder 需要的 ipa 签名,超详细的教程,你不看吃亏的是自己!

今天使用 hbuilder 运行到 ios 真机的时候&#xff0c;突然发现还需要 ipa 签名&#xff0c;这是什么东东呢&#xff1f; 1、IPA 签名是什么&#xff1f; 因苹果公司禁止企业证书用于非企业内部开发者。所以开发者无法再使用DCloud的企业证书签名的标准运行基座。 运行标准基…

享元模式:减少内存占用的诀窍

一&#xff0c;概要 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它主要通过共享对象来降低系统中对象的数量&#xff0c;从而减少内存占用和提高程序性能。这听起来有点像单例模式&#xff0c;但它们在实现和用途上有很大的区别。享元…

web前端求职面试题参考精选(合集)

web前端求职面试题之选择题 1. CSS样式表根据所在网页的位置&#xff0c;可分为?(B ) A.行内样式表、内嵌样式表、混合样式表 B.行内样式表、内嵌样式表、外部样式表 C.外部样式表、内嵌样式表、导入样式表 D.外部样式表、混合样式表、导入样式表 2. 对于标签&#xff0…

01 | 一条 SQL 查询语句是如何执行的?

以下内容出自 《MySQL 实战 45 讲》 一条 SQL 查询语句是如何执行的&#xff1f; 下面是 MySQL 的基本架构示意图&#xff0c;从中可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。 大体来说&#xff0c;MySQL 可以分为 Server 层和存储引擎层两部分。 Server …

较旧系统的轻量级的LINUX发行版—FATDOG64

导读我们回顾FatDog64 Linux&#xff0c;这个轻量级的Linux发行版可能不是现代的&#xff0c;但它非常适合于老化的计算机&#xff0c;fatdog64 Linux是一个小而灵活的64位多用户Linux发行版。 有一个Linux发行版几乎每一个都需要&#xff0c;有Linux分布的黑客&#xff0c;天…

Jenkins在Ubuntu的安装问题

使用apt安装没有成功&#xff0c;各种报错。最后使用了离线安装方式。 1、安装jdk。和之前的安装jdk无异&#xff0c;增加一步 添加一个软链接 sudo ln -s /path/to/java/home/bin/java /usr/bin/java 2、下载deb包&#xff0c;然后安装 2.1、前置步骤&#xff0c;安装可能…

点击向数组中添加对象,并判断是否已经包含了重复值

需求&#xff1a;现在有一堆列表&#xff0c;当我每次点击列表的每一项时&#xff0c;希望将此项添加到一个数组中&#xff0c;并且已添加的数据不能再添加 效果图 实现&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset&quo…

kafka3.x 入门 安装(一)

一、下载地址 http://kafka.apache.org/downloads.html 二、 zookeeper安装教程 https://blog.csdn.net/weixin_43205308/article/details/130426019 三、解压 这里使用的是kafka_2.12-3.0.0.tgz tar -zvxf kafka_2.12-3.0.0.tgz四、修改配置 进入到安装路径的config文件夹下…

chatgpt赋能python:Python选择排序最简单的写法是什么?

Python选择排序最简单的写法是什么&#xff1f; 选择排序是一种简单的排序算法&#xff0c;通常用于小规模数据集的排序。Python是一种广泛使用的脚本语言&#xff0c;也可以用来实现选择排序算法。这篇文章将介绍Python选择排序的最简单写法&#xff0c;并分析其优缺点。 选…