前端学习---Vue(6)路由

news2024/11/26 12:52:31

一、前端路由的概念和原理

Hash地址与组件的对应关系。

Hash:url中#之后的都是Hash地址 location.hash

1.1 前端路由的工作方式 

① 用户点击了页面上的路由链接

② 导致了 URL 地址栏中的 Hash 值发生了变化

③ 前端路由监听了到 Hash 地址的变化

④ 前端路由把当前 Hash 地址对应的组件渲染都浏览器中

 二、vue-router的使用

2.1 安装配置

npm i vue-router@3.5.2 -S

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

//当前项目的路由模块

import Vue from 'vue'
import VueRouter from 'vue-router'

//调用Vue.use()把VueRouter安装为Vue的插件
Vue.use(VueRouter)

//创建路由的实例对象
const router = new VueRouter()

//向外共享的实例对象
export default router

在main.js中挂载

import router from '@/router/index.js'

new Vue({
  render: h => h(App),
  router
}).$mount('#app')

导入时如果只给文件夹名则默认加载该文件夹中的index.js

 2.2 基本使用

首先渲染app.vue根组件 router-link本质上是a链接,不需要在前面加#

    <router-link to="/home">首页</router-link>
    <router-link to="/movie">电影</router-link>
    <router-link to="/about">关于</router-link>
    <hr />
    <!-- 只是一个占位符 -->
    <router-view></router-view>

然后在router/index.js中配置路由和组件的对应关系

import Home from '@/components/Home.vue'
import Movie from '@/components/Movie.vue'
import About from '@/components/About.vue'

//调用Vue.use()把VueRouter安装为Vue的插件
Vue.use(VueRouter)

//创建路由的实例对象
const router = new VueRouter({
    //routes是一个数组 作用:定义“hash”地址与“组件”之间的对应关系
    routes:[
        {path:'/home', component:Home},
        {path:'/movie', component:Movie},
        {path:'/about', component:About},
    ]
})

//向外共享的实例对象
export default router

三、vue-router的常见用法

3.1 路由重定向

用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面

const router = new VueRouter({
    //routes是一个数组 作用:定义“hash”地址与“组件”之间的对应关系
    routes:[
        //用户访问/时跳转到/home对应的路由规则
        {path:'/', redirect:'/home'},
        {path:'/home', component:Home},
        {path:'/movie', component:Movie},
        {path:'/about', component:About},
    ]
})

3.2 嵌套路由

通过路由实现组件的嵌套展示

about.vue

    <router-link to="/about/tab1">tab1</router-link>
    <router-link to="/about/tab2">tab2</router-link>
    <hr/>
    <router-view></router-view>

router/index.js 找到对应的路由规则添加children,并添加重定向

        {
            path:'/about',
            component:About,
            redirect:'/about/tab1',
            children:[
                {path:'/about/tab1', component:Tab1},
                {path:'/about/tab2', component:Tab2}
            ]
        },

 3.3 动态路由匹配

把Hash地址中可变的部分定义为参数项,从而提高路由规则的复用性

在路由变化的部分改为:paramsName

    <router-link to="/movie/1">爱乐之城</router-link>
    <router-link to="/movie/2">恋恋笔记本</router-link>
    <router-link to="/movie/3">泰坦尼克号</router-link>
{path:'/movie/:id', component:Movie}

然后在对应渲染的组件中通过this.$route.params.paramsName 访问动态路由部分

<h3>Movie 组件 --- {{ this.$route.params.id }}</h3>

 3.3.1 在路由中使用props传参

{path:'/movie/:id', component:Movie, props:true},

然后再对应组件中添加props:[ 'id' ]

在hash地址中,/后面的参数项叫“路径参数”,使用this.$route.params访问路径参数;?后面的参数项叫“查询参数”,使用this.$route.query访问查询参数

this.$route中path只是路径,fullPath是完整的地址(含参数)

 3.4 编程式导航

在浏览器中,点击链接实现导航的方式,叫做声明式导航。

例:普通网页中点击a连接,vue中使用<router-link>

在浏览器中,调用 API 方法实现导航的方式,叫做编程式导航

例:普通网页中调用 location.href 跳转到新页面的方式

3.4.1 vue-router中的编程式导航API

① this.$router.push('hash 地址')

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

② this.$router.replace('hash 地址')

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

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

⚫ 实现导航历史前进、后退 

3.4.2 $router.go 的简化用法

① $router.back()

⚫ 在历史记录中,后退到上一个页面

② $router.forward()

⚫ 在历史记录中,前进到下一个页面

3.5 导航守卫 

控制路由的访问权限

3.5.1 全局前置守卫

每次发生路由跳转都会触发

//只要发生路由跳转,必然会触发指定的回调函数
router.beforeEach((to, from, next) => {
    //将要访问的路由信息对象,将要离开的路由信息对象,next表示放行
    console.log(from, to)
    next()
})

3.5.2 next()的三种调用方式

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

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

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

 

router.beforeEach((to, from, next) => {
    //将要访问的路由信息对象,将要离开的路由信息对象,next表示放行
    if(to.path === '/main'){
        const token = localStorage.getItem('token')
        if(token)next()
        else next('/login')
    }
    else next()
})

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

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

相关文章

doris分区、join

动态分区和临时分区 动态分区 旨在对表级别的分区实现生命周期管理(TTL)&#xff0c;减少用户的使用负担。 目前实现了动态添加分区及动态删除分区的功能。只支持 Range 分区。原理 在某些使用场景下&#xff0c;用户会将表按照天进行分区划分&#xff0c;每天定时执行例行任…

tidyverse中filter行筛选时缺失值存在的一个坑

大家好&#xff0c;我是邓飞&#xff0c;好久没有更新博客了&#xff0c;是因为好久没有进步了。 之前我认为鲁迅说的对&#xff0c;他在《野草》中写道&#xff1a;“当我沉默着的时候&#xff0c;我觉得充实&#xff1b;我将开口&#xff0c;同时感到空虚”。现在确切的情况…

msvcr90.dll丢失的解决方法

在使用计算机的过程中&#xff0c;我们时常会遇到一些问题&#xff0c;比如应用程序无法正常启动&#xff0c;提示msvcr90.dll文件丢失&#xff0c;这个问题困扰了许多计算机用户。那么&#xff0c;怎么才能解决这个问题呢&#xff1f; 首先&#xff0c;让我们先了解一下msvcr…

c语言编程练习题:7-65 字符串替换

#include <stdio.h>int main() {char c;while (scanf("%c", &c) 1 && c ! \n) {if (c > A && c < Z) {c Z - (c - A);}printf("%c", c);}return 0; }代码来自&#xff1a;https://yunjinqi.top/article/190

Spring:spring-web中DeferredResult执行过程分析

对于HTTP请求的处理&#xff0c;有时处理请求的时间较长&#xff0c;可能会采用异步处理方式来处理。一般常用的异步处理方式是采用DeferredResult&#xff0c;本文会简单分析一下spring-web的整个处理过程。 首先&#xff0c;提供一个简单的DeferredResult例子&#xff1a; R…

C++map和set

目录&#xff1a; 什么是关联式容器&#xff1f;键值对树形结构的关联式容器 set的概念multiset的使用pair和make_pair map的概念用“[]”实现统计水果的次数 multimap的使用 什么是关联式容器&#xff1f; 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比…

Centos7 Failed to start login service 问题

最近发现Centos7有个问题&#xff0c;用普通用户登录的时候&#xff0c;打开命令窗口无法进行操作一直卡在那里&#xff0c;但切换到root用户后命令输入又正常。因为我需要从 window 上的 SecureCRT 去连接 Centos7&#xff0c;每次都需要用户登录&#xff0c;然后把防火墙关闭…

TLD7002学习笔记(一)-芯片介绍

文章目录 1. 前言2. TLD7002-16ES简介3. TLD7002-16ES基本功能介绍3.1 引脚和功能框图3.2 状态机3.2.1 正常工作时状态机3.2.2 OTP烧录或者仿真时的状态机 3.3 GPIN0和GPIN1引脚3.4 器件地址3.5 电流配置3.6 PWM配置3.7 并行输出&热降额&热过载保护 TLD7002-16ES诊断功…

高完整性系统:INTRODUCING ADA

目录 1. ADA的历史 2. ADA的特点 2.1 Strong, Static Typing 强语言、强静态类型语言 2.1.1 ADA is Strong, Static Typing 2.1.2 C is Weak, Static Typing 2.2 Module System 2.3 Portable 2.3.1 ADA 2.3.2 C 2.3.3 Cost of Runtime Checking 2.4 Readability …

Java jvm调优

系列文章目录 文章目录 系列文章目录前言JVM 基础面试题11. JDK&#xff0c;JRE以及JVM的关系2. 我们的编译器到底干了什么事&#xff1f;3. 类加载机制是什么&#xff1f;3.1 装载(Load)3.2 链接(Link)验证(Verify)准备(Prepare)解析(Resolve) 3.3 初始化(Initialize) 4. 类加…

chatgpt赋能python:Python三次幂与其应用

Python三次幂与其应用 Python是一种高级编程语言&#xff0c;因其简单易用的语法和广泛应用而备受欢迎。在该语言中&#xff0c;三次幂是其中一个常用操作之一。本文将介绍Python三次幂的概念及其应用&#xff0c;为您带来有价值的参考。 什么是Python三次幂&#xff1f; Py…

KubeSphere 社区双周报 | 杭州 Meetup 报名中 | 2023.05.12-05.25

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.05.12-2023.…

Linux - Java 8 入门安装与重装教程集锦

一、入门初始安装 1. 具体安装教程 1. linux 系统中如何安装java环境&#xff08;通过tar.gz文件&#xff09; 安装包下载链接 Java 的 tar.gz 安装包下载链接传送门 Linux 系统的 Java 环境变量配置教程 1. linux查看java版本&#xff0c;以及配置java home 2. Linux环…

stackqueue

这篇主要讲栈(stack)和队列(queue)&#xff0c;实际要学习的数据结构有三个&#xff1a;stack、queue、priority_queue 这些数据结构已经不属于容器了&#xff0c;而是容器适配器。 list的第二个参数是空间配置器&#xff0c;支持申请空间&#xff1b;而list和queue的第二个参…

Windows下利用Anaconda创建多个CUDA环境

参考 https://blog.csdn.net/qq_42395917/article/details/126237388 https://blog.csdn.net/qq_42406643/article/details/109545766 (待学习补充) https://blog.csdn.net/qq_43919533/article/details/125694437 (待学习补充) 安装cudatoolkit和cudnn # 前提是我已经安装了…

【Python 打包应用发布程序】零基础也能轻松掌握的学习路线与参考资料

Python是一种流行的编程语言&#xff0c;因其易学易用、灵活和高效而受到广泛关注和应用&#xff0c;尤其是在开发Web应用、数据科学和人工智能方面。Python的强大之处在于其丰富的第三方库和工具&#xff0c;可以让开发者轻松地构建复杂的应用程序和脚本工具。但是&#xff0c…

完全掌握git入门到精通各类免费书籍整理

大型软件项目开发&#xff0c;多人群组开发都离不开的版本控制工具 git&#xff0c;命令简单&#xff0c;想要完全掌握却需要付出一点时间。我们将一些评价较高的git免费学习资料网站做了整理&#xff0c;收录到 学习使用git完全指南各种免费书籍分享 完全掌握git入门到精通各…

【IDEA插件开发】快速入门系列01 开发一个简单的Idea插件

IDEA插件开发流程 IDEA插件开发官方文档 英文好的建议阅读官方文档 IDEA插件开发官方文档&#xff1a;https://plugins.jetbrains.com/docs/intellij/welcome.html 搭建IDEA插件开发环境 1.安装社区版IDEA 在这里我们需要下载IDEA社区版的历史版本。 历史版本的下载网址&a…

自学黑客?一般人我劝你还是算了吧

博主本人 18年就读于一所普通的本科学校&#xff0c;21年 6 月在三年经验的时候顺利通过校招实习面试进入大厂&#xff0c;现就职于某大厂安全联合实验室。 我为啥说自学黑客&网络安全&#xff0c;一般人我还是劝你算了吧。因为我就是那个不一般的人。 首先我谈下对黑客&am…

Java日期时间调整的几种方式

一、Calendar类 我们现在已经能够格式化并创建一个日期对象了&#xff0c;但是我们如何才能设置和获取日期数据的特定部分呢&#xff0c;比如说小时&#xff0c;日&#xff0c;或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。 Calendar类的…