vue-router 的基本用法

news2024/11/14 13:47:37

vue-router 的基本用法

1.什么是 vue-router

vue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项目中组件的切换。

vue-router 的官方文档地址:https://router.vuejs.org/zh/

2.vue-router 安装和配置的步骤

  • 安装 vue-router 包
npm i vue-router@3.5.2 -S
  • 创建路由模块

在 src 源代码目录下,新建 router/index.js 路由模块,并初始化如下的代码:

// 1.导入 Vue 和 VueRouter 的包
import Vue from 'Vue'
import VueRouter from 'vue-router'

// 2.调用 Vue.use() 函数,把 VueRouter 安装为 Vue 的插件
Vue.vue(VueRouter)

// 3.创建路由模块的实例对象
const router = new VueRouter({
    routes:[
        {
            path:'/',
            redirect:'/home'
        },{
         	path:'/home',
            component:Home,
            //通过 children 属性,嵌套声明子级路由规则
            children:[
                {
                    //子级路由规则不需要斜线/
                    path:'tab1',
                    component:Tab1
                },{
                    path:'tab2',
                    component:Tab2
                }
            ]
        },{
            path:'/movie',
            component:Movie
        }
    ]
})

// 4.向外共享路由实例对象
export default router
  • 导入并挂载路由模块

在 src/main.js 入口文件中,导入并挂载路由模块。示例代码如下:

import Vue from 'vue'
import App from './App.vue'

// 1.导入路由模块
import router from '@/router'

new Vue({
    render:h => h(App),
    // 2.挂载路由模块
    router:router
}).$mount('#app')
  • 声明路由链接和占位符

在 About.vue 组件中,声明 tab1 和 tab2 的子路由链接以及子路由占位符。示例代码如下:

<temlate>
    <div>
        <router-link to='/about/tab1'> tab1 </router-link>
        <router-link to='/about/tab2'> tab2 </router-link>
        <!-- 2.在 about 页面中,声明子路由的占位符 -->
        <router-view></router-view>
    </div>
</template>

3.vue-router 中的编程式导航 API

vue-router 提供了许多编程式导航的 API,其中最常用的导航 API 分别是: ① this.$router.push(‘hash 地址’)

  • 跳转到指定 hash 地址,并增加一条历史记录

② this.$router.replace(‘hash 地址’)

  • 跳转到指定的 hash 地址,并替换掉当前的历史记录

③ this.$router.go(数值 n)

  • 实现导航历史前进、后退
  • $router.back() 在历史记录中,后退到上一个页面
  • $router.forward() 在历史记录中,前进到下一个页面

4.导航守卫

  • 全局前置守卫

每次发生路由的导航跳转时,都会触发全局前置守卫。因此,在全局前置守卫中,程序员可以对每个路由进行访问权限的控制:

//在 /router/index.js 中

//创建路由实例对象
const router = new VueRouter({...})
                              
//调用路由实例对象的 beforeEach 方法,即可声明“全局前置守卫”
//每次发生路由导航跳转的时候,到会自动触发 fn 这个“回调函数”
router.beforeEach(fn)
  • 守卫方法的 3 个形参
//创建路由实例对象
const router = new VueRouter({...})
//全局前置守卫
router.beforeEach((to,from,next)=>{
    //to 是将要访问的路由信息对象
    //from 是将要的路由的信息对象
    //next 是一个函数,调用 next() 表示放行,允许这次路由导航
})                              

参考示意图,分析 next 函数的 3 种调用方式最终导致的结果:

当前用户拥有后台主页的访问权限,直接放行:next()

当前用户没有后台主页的访问权限,强制其跳转到登录页面:next(‘/login’)

当前用户没有后台主页的访问权限,不允许跳转到后台主页:next(false)

router.beforeEach((to,from,next)=>{
    if(to.path === '/main'){
        const token = localStorage.getItem('token')
        if(token){
            next()// 持有 token 访问后台主页
        }else{
            next('/login')// 访问后台主页,但是没有token,强制跳转登录页
        }
    }else{
        next()// 不是访问后台主页,直接放行
    }
})

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GIT分支管理策略

git基本操作git操作的前提条件:本地windows安装git学习idea中的插件使用idea的git基本操作:远程仓库remote更新fetch:git fetch拉取pull: git pull上传push: git push合并merge: git merge 合并分支本地提交commit:git commit分支branch: git branch 查看分支或者 切换分支上述…

SpringBoot整合Junit

创建项目 idea创建空项目Empty Project。项目中创建模块&#xff0c;选择SpringBoot Initialize快速构建SpringBoot项目。 依赖这里什么也不用选择。 pom文件中默认有两个依赖: spring-boot-starter springboot如果不导入任何依赖&#xff0c;默认的一个基础依赖。spring-…

5.3 线程安全问题解决方案

文章目录1.概述2.同步和异步3.synchronized同步关键字3.1 写法3.2 前提3.3 特点4.练习-改造售票案例-继承Thread4.1 代码实现4.2 注意事项5.练习-改造售票案例-实现Runnable接口5.1 代码实现5.2 注意事项6.练习-改造售票案例-使用线程池6.1 代码实现6.2 代码分析7.线程锁7.1 悲…

七、确保web安全的HTTPS

HTTPS 1、HTTP 的缺点 HTTP的主要缺点&#xff1a; 通信使用明文&#xff08;不加密&#xff09;&#xff0c;内容可能会被窃听 HTTP 本身不具备加密的功能&#xff0c;因此无法做到对通信整体&#xff08;使用 HTTP 协议通信的请求和响应的内容&#xff09;进行加密。所以按…

actipro-winforms-controls-23.1.0 Crack

actipro-winforms一组用于构建漂亮的 Windows 窗体桌面应用程序的 UI 控件&#xff0c;用于构建 IDE 的高级停靠窗口、MDI、属性网格、树控件和文件夹/文件浏览器&#xff0c;用于常见数据类型、自动完成、屏蔽编辑和代码编辑的强大编辑器&#xff0c;功能区、图表、微型图表、…

Centos7 安装 MySQL 8.0.31详细教程(亲测无障碍必成功)

操作之前&#xff0c;首先检查防火墙是否关闭&#xff08;直接设置永久关闭&#xff09; 查看防火墙状态&#xff1a;firewall-cmd --state 禁止firewall开机启动 永久生效&#xff1a;systemctl disable firewalld.service 重启电脑&#xff1a;reboot 1. 在FinallShell上传或…

Julia 教程

Julia 是一个开源的编程语言&#xff0c;采用 MIT 许可证&#xff0c;每个人都可以免费使用。 Julia 是一个面向科学计算的高性能动态高级程序设计语言。 Julia 最初是为了满足高性能数值分析和计算科学的需要而设计的&#xff0c;不需要解释器&#xff0c;速度快。 Julia 于…

筛选效率直接起飞,复杂场景秒变简单丨三叠云

表单 路径 表单设计 >> 高级筛选 功能简介 筛选条件优化升级&#xff0c;支持多种混合条件筛选。 功能描述&#xff1a; 本次更新支持2个层级的条件&#xff0c;系统处理数据时&#xff0c;将会先根据第二个层级的条件关系找出数据、继而再根据第一层级即分组之间的…

解决CondaUpgradeError网上的方法都不奏效(回退版本、upgrade/update都不行)的问题和CondaValueError

问题描述 Executing transaction: failed ERROR conda.core.link:_execute(502): An error occurred while installing package ‘conda-forge::certifi-2022.9.24-pyhd8ed1ab_0’. CondaUpgradeError: This environment has previously been operated on by a conda version…

Java 基础——File 类与 I/O 流

目录1.java.io.File 类的使用1.1.概述1.2.构造器1.3.常用方法1.3.1.获取文件和目录基本信息1.3.2.列出目录的下一级1.3.3.File类的重命名功能1.3.4.判断功能的方法1.3.5.创建、删除功能2.I/O 流原理及流的分类2.1.I/O 原理2.2.流的分类2.3.流的 API3.节点流之一&#xff1a;Fil…

项目经理PMO分别是什么?

1. PMO是什么&#xff1f;&#xff08;1&#xff09;定义PMO项目经理&#xff08;Project Management Office Manager&#xff09;&#xff0c;也称为项目管理办公室经理、项目管理中心或者项目管理部。一般来说&#xff0c;PMO就是负责公司项目管理政策、标准的制定&#xff0…

C/C++每日一练(20230220)

目录 1. 利用字母组成图形 2. 子集 II 3. 路径总和 II 附录 深度优先搜索算法 广度优先搜索算法 1. 利用字母组成图形 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形&…

ROS2入门-话题-服务-接口

ROS2入门-话题-服务-接口 本文学习的是《动手学ROS2》 报错放在另一个文章中。 文章目录ROS2入门-话题-服务-接口Linux常用命令sudochomd 修改文件权限安装软件apt安装软件dpkg安装deb包打开终端VS code关机/重启静态链接库/动态链接库Cmake设置treeROS节点功能包创建功能包列…

数据分析,如何看待我国1400万人忍受极端通勤,单程通勤超60分钟!

女生极限通勤每天来回 6.5 小时&#xff0c;上海某位女士公司离家单程约100公里左右&#xff0c;单程通勤需要3小15分&#xff0c;来回通勤时间为6.5小时。如此长的通勤时间却不是个例&#xff0c;全国有超1400万人正在忍受单程超过60分钟的极端通勤&#xff0c;如何看待我国 1…

将默认安装的 WSL2 迁移至指定目录

将默认安装的 WSL2 迁移至指定目录WSL2 默认安装在 C 盘下&#xff0c;系统盘空间有限&#xff0c;推荐更改安装目录。 1. 默认安装的 WSL2 目录 C:\Users\cheng\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx 2. …

使用Swiper插件实现视频轮播,怎么实现切换自动播放视频?

一、需求分析 这两天讨论了一个项目需求&#xff0c;刚开始是希望&#xff1a;轮播图中嵌入视频&#xff0c;轮播到视频自动播放&#xff0c;播放完毕切换下一张轮播&#xff0c;手动切换时暂停播放视频。后面因为自动播放没有声音&#xff0c;便暂时放弃了这个想法&#xff0…

第2讲-数据库系统的结构抽象与演变(测试题总结)

一、测试题 DBS的三级模式&#xff1a;外模式&#xff08;也叫用户模式或子模式&#xff09;&#xff0c;模式&#xff08;也叫逻辑模式&#xff09;&#xff0c;内模式&#xff08;也叫存储模式&#xff09; 外模式/模式映像 实现了数据的逻辑独立性 模式/内模式映像 实现了…

李宏毅流模型

李宏毅流模型 常见的3中生成模型,Flow-base Model是第四种生成模型 2. normal distribution&#xff1a;正态分布 max object function:最大目标函数 dimention:维度 Inverse function&#xff1a;反函数 如果两个函数本身就互为反函数&#xff0c;那么这两个函数求解得到的两…

一、在没有Vuex如何解决组件间数据传递的问题

Vuex【state、mutations、actions、modules、getters】 一、在没有Vuex如何解决组件间数据传递的问题 举例&#xff1a;点击不同的选项卡来切换页面时 选项卡和页面属于不同的组件&#xff0c;他们都在同一个父组件之下。 选项卡和页面组件的数据都来源于父组件。在选项卡组…

Relational KD(CVPR 2019)原理与代码解析

paper&#xff1a;Relational Knowledge Distillationcode&#xff1a;https://github.com/megvii-research/mdistiller/blob/master/mdistiller/distillers/RKD.py背景本文从语言结构主义的角度来重新审视知识蒸馏&#xff0c;前者主要关注一个符号学系统中的结构关系。索续尔…