位置: IT常识 - 正文

Vue3【Vue路由概念、项目引入路由、集成Vue路由 、编程式导航、带参数的动态路由匹配 、嵌套路由、重定向和别名、命名视图、不同的历史模式​】(十)-全面详解(学习总结---从入门到深化)(vue路由的理解)

编辑:rootadmin
Vue3【Vue路由概念、项目引入路由、集成Vue路由 、编程式导航、带参数的动态路由匹配 、嵌套路由、重定向和别名、命名视图、不同的历史模式​】(十)-全面详解(学习总结---从入门到深化)

推荐整理分享Vue3【Vue路由概念、项目引入路由、集成Vue路由 、编程式导航、带参数的动态路由匹配 、嵌套路由、重定向和别名、命名视图、不同的历史模式​】(十)-全面详解(学习总结---从入门到深化)(vue路由的理解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue路由详解,vue3的路由,vue3.0路由,vue路由两种方式,vue3.0路由,vue路由详解,vue路由详解,vue3的路由,内容如对您有帮助,希望把文章链接给更多的朋友!

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人 

Vue路由概念

Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举

单页面应用也称为SPA(Single Page Application),它主要是网页的界面渲染在一个静态的页面上,当用户要从当前界面跳到另一个界面的时候,在这个过程中,不需要重新加载整个页面,所以页面之间的切换十分快速

多页面在进行页面切换时十分缓慢,在路由进行跳转的时候会加载所有的资源,而且页面重复代码多

对比之下,单页面原理是JavaScript动态修改内容而已,资源只需要局部的刷新,因此SPA具有极高的流畅度,有利于提升用户体验 

单页面VS多页面 

路由作用 

页面与页面之前的切换,是通过不同的地址访问的,地址对应着要显示的组件。而实现这个页面切换显示的功能就是路由的作用

项目引入路由 

用 Vue + Vue Router 创建单页应用非常简单:通过 Vue.js,我们已经用组件组成了我们的应用。当加入 Vue Router 时,我们需要做 的就是将我们的组件映射到路由上,让 Vue Router 知道在哪里渲 染它们 

安装路由 

npm install vue-router@4 --save

实现路由功能

import { createApp } from 'vue'import App from './App.vue'import { createRouter,createWebHashHistory } from "vue-router"import Home from "./pages/Home.vue"import About from "./pages/About.vue"const routes = [ { path:"/", component:Home }, { path:"/about", component:About }]const router = createRouter({ // 路由地址访问方式 # / // 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式 history: createWebHashHistory(), routes})const app = createApp(App)app.use(router)app.mount('#app')<template> <h3>Home首页</h3></template><template> <h3>About关于页面</h3></template><template> <!-- 路由匹配到的组件将渲染在这里 --> <router-link to="/">Home</router-link> <router-link to="/about">About</router-link> <router-view></router-view></template>

router-view

router-view 将显示与 url 对应的组件。你可以把它放在任何地方,以适应你的布局

router-link 

请注意,我们没有使用常规的 a 标签,而是使用一个自定义组件 router-link 来创建链接。 这使得 Vue Router 可以在不重新加载页面的情况下更改 URL,处理 URL 的生成以及编码我们将在后面看到如何从这些功能中获益

实时效果反馈

1.在Vue路由中,实现页面跳转下列是哪一个:

A router

B router-view

C router-link

D createRouter 

集成Vue路由 

如果文件全部放在主入口文件中是不合理的,所以我们需要提取成 为独立的路由文件新项目可以直接选择集成路由在其中 

import { createRouter,createWebHashHistory } from "vue-router"import Home from "../pages/Home.vue"import About from "../pages/About.vue"const routes = [ { path:"/", component:Home }, { path:"/about", component:About }]const router = createRouter({ history: createWebHashHistory(), routes})export default routerimport { createApp } from 'vue'import App from './App.vue'import router from "./router"const app = createApp(App)app.use(router)app.mount('#app')编程式导航

除了使用 < router-link >  创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现

在 Vue 实例中,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push  

选项式API 

<template> <h3>Home首页</h3> <button @click="clickHandler">跳转到About页面</button></template><script> export default { methods:{ clickHandler(){ this.$router.push("/about") } }}</script>

组合式API

<template> <h3>About关于页面</h3> <button @click="clickHandler">跳转到首页</button></template><script setup>import { useRouter } from 'vue-router'const router = useRouter()function clickHandler(){ router.push("/")}</script>

实时效果反馈

1.在Vue路由中,下列那个可以实现编程式导航跳转:

A this.$router.push()

B this.push()

C push()

D $router.push()

带参数的动态路由匹配 

很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例 如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用 户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数 

// router/index.jsconst routes = [ { path:"/", component:Home } ... { path:"/details/:name", component:Details }]<template> <h3>列表</h3> <ul> <li v-for="(item,index) in user.names" :key="index"> <router-link :to="'/details/' + item">{{ item }}</router-link> </li> </ul></template><script setup> import { reactive } from "vue" const user = reactive({ names:["iwen","ime","frank"]})</script>

选项式API

<template> <h3>详情</h3> <p>{{ name }}</p></template><script> export default { data(){ return{ name:"" } }, mounted(){ this.name = this.$route.params.name }}</script>Vue3【Vue路由概念、项目引入路由、集成Vue路由 、编程式导航、带参数的动态路由匹配 、嵌套路由、重定向和别名、命名视图、不同的历史模式​】(十)-全面详解(学习总结---从入门到深化)(vue路由的理解)

组合式API

<template> <h3>详情</h3> <p>{{ name }}</p></template><script setup> import { useRoute } from "vue-router" import { ref } from "vue" const route = useRoute() const name = ref("") name.value = route.params.name;</script>

可选参数

{ path:"/details/:name?", component:Details}

实时效果反馈

1.在Vue路由中,可以获取页面跳转传递的参数是:

A router

B params

C this.params

D this.$route.params

嵌套路由 

一些应用程序的 UI 由多层嵌套的组件组成。在这种情况下,URL 的 片段通常对应于特定的嵌套组件结构

<template> <h3>新闻</h3> <router-link to="/news/sport">Sport</router-link> | <router-link to="/news/yule">Yule</router-link> <router-view></router-view></template><template> <h3>体育新闻</h3></template><template> <h3>娱乐新闻</h3></template>{ path:"/news", component:News, children:[ { path:"sport", component:SportNews }, { path:"yule", component:YuleNews } ]}重定向和别名

重定向 

重定向也是通过 routes 配置来完成

{ path:"/news", component:News, redirect:"/news/sport", children:[ { path:"sport", component:SportNews }, { path:"yule", component:YuleNews } ]}

别名

重定向是指当用户访问 /home 时,URL 会被 / 替换,然后匹配成 / 。那么什么是别名呢

{ alias:"yl", path:"yule", component:YuleNews} 命名路由

除了 path 之外,你还可以为任何路由提供 name 。这有以下优点 

{ name:"About", path:"/about", component:About}this.$router.push({ name:"About"})<router-link :to="{ name:'Details',params:{ name:item } }">{{ item }}</router-link>命名视图

有时候想同时 (同级) 展示多个视图,而不是嵌套展示,例如创建一 个布局,有 sidebar (侧导航) 和 main (主内容) 两个视图,这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图, 而不是只有一个单独的出口。如果 router-view 没有设置名字,那么默 认为 default 

const routes = [ { name:"Home", path:"/", components:{ default:Home, // 它们与 `<router-view>` 上的 `name` 属性匹配 AD } }, { name:"About", path:"/about", components:{ default:About, AD } }]<template> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> <router-view></router-view> <router-view name="AD"></router-view></template>不同的历史模式

在创建路由器实例时, history 配置允许我们在不同的历史模式中进行选择 

Hash 模式 

hash 模式是用 createWebHashHistory() 创建的

import { createRouter, createWebHashHistory } from 'vue-router'const router = createRouter({ history: createWebHashHistory(), routes: [ //... ],})

HTML5 模式

用 createWebHistory() 创建 HTML5 模式,推荐使用这个模式

import { createRouter, createWebHistory } from 'vue-router'const router = createRouter({ history: createWebHistory(), routes: [ //... ],})

当使用这种历史模式时,URL 会看起来很 "正常",例如 https://example.com/user/id 。漂亮!

不过,问题来了。由于我们的应用是一个单页的客户端应用,如果没有适当的服务器配置,用户在浏览器中直接访问 https://example.com/user/id ,就会得到一个 404 错误。这就丑了。

不用担心:要解决这个问题,你需要做的就是在你的服务器上添加 一个简单的回退路由。如果 URL 不匹配任何静态资源,它应提供与 你的应用程序中的 index.html 相同的页面。漂亮依旧!

具体参考地址:

https://router.vuejs.org/zh/guide/essentials/history-mode.h tml#html5-%E6%A8%A1%E5%BC%8F 

导航守卫 

正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的 

全局前置守卫 

你可以使用 router.beforeEach 注册一个全局前置守卫,当一个导航触发时,就会触发全局前置守卫

router.beforeEach((to, from, next) => { // 返回 false 以取消导航 next()})

 全局解析守卫

你可以用 router.beforeResolve 注册一个全局守卫。这和 router.beforeEach 类似

router.beforeResolve((to,from,next) => { next()})

 全局后置钩子

你可以直接在路由配置上定义 beforeEnter 守卫,在导航结束之后触发

router.afterEach((to,from) => {})

 路由独享的守卫

你可以直接在路由配置上定义 beforeEnter 守卫, beforeEnter 守卫 只在进入路由时触发

{ name: "List", path: "/list", component: List, beforeEnter:(to,from) => { return true; }} 组件内的守卫

你可以在路由组件内直接定义路由导航守卫

<template> <h3>Home首页</h3></template><script> export default { beforeRouteEnter(to, from){ // 在渲染该组件的对应路由被验证前调用 // 不能获取组件实例 `this` ! // 因为当守卫执行时,组件实例还没被创建! console.log(to,from) beforeRouteUpdate(to,from){ // 在当前路由改变,但是该组件被复用时调用 // 举例来说,对于一个带有动态参数的路径 `/users/:id`,在 `/users/1` 和 `/users/2` 之间 跳转的时候, // 由于会渲染同样的 `UserDetails` 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 // 因为在这种情况发生的时候,组件已经挂载好了,导航守卫可以访问组件实例 `this` }, beforeRouteLeave(to,from){ // 在导航离开渲染该组件的对应路由时调用 // 与 `beforeRouteUpdate` 一样,它可以访问组件实例 `this` }}</script>

 完整的导航解析流程

本文链接地址:https://www.jiuchutong.com/zhishi/299578.html 转载请保留说明!

上一篇:强化学习——Q-Learning算法原理

下一篇:若依框架:前端登录组件与图像验证码(若依框架前端改造)

  • 手机卡领的QQ音乐会员怎么登(手机卡领的qq音乐会员怎么用)

    手机卡领的QQ音乐会员怎么登(手机卡领的qq音乐会员怎么用)

  • 荣耀手机如何设置导航三键(荣耀手机如何设置图标大小)

    荣耀手机如何设置导航三键(荣耀手机如何设置图标大小)

  • 苹果6可以更新ios14吗(苹果6可以更新到ios13吗)

    苹果6可以更新ios14吗(苹果6可以更新到ios13吗)

  • 苹果11能指纹解锁码(苹果11指纹解锁在哪里设置)

    苹果11能指纹解锁码(苹果11指纹解锁在哪里设置)

  • 微信无缘无故被注销了怎么办(微信无缘无故被投诉了、是怎么回事)

    微信无缘无故被注销了怎么办(微信无缘无故被投诉了、是怎么回事)

  • 收款码给别人有风险吗(收款码给别人有关系吗)

    收款码给别人有风险吗(收款码给别人有关系吗)

  • 解压缩的临时文件在哪(解压缩的临时文件)

    解压缩的临时文件在哪(解压缩的临时文件)

  • 快手经常访问一个人对方会知道吗(快手经常访问一个人作者周报)

    快手经常访问一个人对方会知道吗(快手经常访问一个人作者周报)

  • ipad没有低电量模式吗(ipad没有低电量弹窗)

    ipad没有低电量模式吗(ipad没有低电量弹窗)

  • hry al00ta是什么型号(hry-al00是什么型号的手机)

    hry al00ta是什么型号(hry-al00是什么型号的手机)

  • 手机怎么录制mp4(手机怎么录制mp4视频)

    手机怎么录制mp4(手机怎么录制mp4视频)

  • 注销微信号后手机号还能绑定其他微信吗(注销微信号后手机号可以重新注册吗)

    注销微信号后手机号还能绑定其他微信吗(注销微信号后手机号可以重新注册吗)

  • 为什么小红书停止运行(为什么小红书停止营业了)

    为什么小红书停止运行(为什么小红书停止营业了)

  • 为什么美图秀秀连不了网(为什么美图秀秀要钱)

    为什么美图秀秀连不了网(为什么美图秀秀要钱)

  • r11pluskt是什么版本(r11pluskt和r11plusk的区别)

    r11pluskt是什么版本(r11pluskt和r11plusk的区别)

  • 全民k歌踢榜是什么意思(全民k歌踢榜是怎么回事)

    全民k歌踢榜是什么意思(全民k歌踢榜是怎么回事)

  • icloud注销是什么意思(注销icloud出错是怎么回事)

    icloud注销是什么意思(注销icloud出错是怎么回事)

  • word2010邮件合并向导(word2010邮件合并教程)

    word2010邮件合并向导(word2010邮件合并教程)

  • vivo共享实时位置怎么修改(vivo共享实时位置)

    vivo共享实时位置怎么修改(vivo共享实时位置)

  • soul怎么读音(soul,读音)

    soul怎么读音(soul,读音)

  • realme x2指纹解锁不灵敏怎么办(realmex2指纹解锁不灵)

    realme x2指纹解锁不灵敏怎么办(realmex2指纹解锁不灵)

  • ipad保护套拆取技巧(ipad保护套怎么取)

    ipad保护套拆取技巧(ipad保护套怎么取)

  • 小米mix2s如何连接电脑(小米mix2怎么连airpods)

    小米mix2s如何连接电脑(小米mix2怎么连airpods)

  • 苹果xr的录音功能在哪里(xr手机录音在哪里)

    苹果xr的录音功能在哪里(xr手机录音在哪里)

  • xsmax手机发烫(xsmax手机发烫怎么解决)

    xsmax手机发烫(xsmax手机发烫怎么解决)

  • 全民k歌怎么隐身进歌房(全民k歌怎么隐藏vip标志)

    全民k歌怎么隐身进歌房(全民k歌怎么隐藏vip标志)

  • qq音乐怎么查看听歌时间(qq音乐怎么查看听歌排行榜)

    qq音乐怎么查看听歌时间(qq音乐怎么查看听歌排行榜)

  • 歌华机顶盒可以投屏吗(歌华机顶盒可以在别人家用吗?)

    歌华机顶盒可以投屏吗(歌华机顶盒可以在别人家用吗?)

  • GHOST不认硬盘或系统安装一半不能安装了该怎么办?(ghost读不出硬盘)

    GHOST不认硬盘或系统安装一半不能安装了该怎么办?(ghost读不出硬盘)

  • 计算机领域各大顶会顶刊集合梳理(计算机领域划分)

    计算机领域各大顶会顶刊集合梳理(计算机领域划分)

  • 未按期纳税申报怎么处理
  • 增值税附加税怎么填
  • 收到商业汇票计入科目
  • 个税免税收入怎么进行更正申报
  • 已认证专票有误怎么回事
  • 代开了专票,但是销售额没有超过30万怎么处理
  • 经营范围预付卡是什么
  • 产权转移书据印花税分录
  • 出售使用过的固定资产
  • 担保费和评审费计入什么科目
  • 工资税后扣款
  • 有未弥补亏损本季度有盈利要计提递延所得税资产吗?
  • 餐厅开增值税普通发票
  • 发票显示不抵扣什么意思
  • 中药饮片的税率现在是多少
  • 企业注销后款项怎么结算
  • 在建工程完工后如何转为固定资产
  • 小规模纳税人纳税申报时间
  • 工会委员会开票信息
  • 私募股权基金税收主要涉及的是什么税收问题
  • 开票的增值税与附加税
  • 开发阶段包括
  • 进口缴纳的关税通过什么核算
  • 资产处置收益与固定资产清理
  • 微信订阅项目
  • linux使用范围
  • 企业为员工提供服务要交增值税吗
  • islp2sta.exe - islp2sta是什么进程 有什么作用
  • 残疾人增值税即征即退政策2020
  • 财政补助收入的支付制度包括
  • 外币兑换业务的银行
  • 单目标优化函数
  • PHP:connection_status()的用法_misc函数
  • 支付投资款怎么做账
  • 现金流量表中如何考虑折旧费
  • 6372056181电子退库收入
  • 企业缴纳残保金规定
  • vue实战开发项目视频
  • 持有至到期投资账务处理
  • 微信小程序游戏手游排行榜
  • 网页设置怎么在css中设置
  • 计提租金怎么做会计分录
  • 发票章没有盖好
  • 销售旧货物的增值税
  • 摊销结束后
  • 卖出看跌期权的最大损失
  • 劳动合同和劳务合同可以一起签吗
  • 房地产公司活动方案
  • 现金折扣要扣除折扣金额入账吗
  • 收到三代手续费的增值税报表填列在哪里
  • 自建不动产领用原材料增值税进项
  • 多交增值税可以不退吗
  • 会计已入账是什么意思
  • 销售现金优惠会计分录
  • 个体工商户的纳税标准
  • 长期待摊费用的摊销期限应该是
  • 远程认证软件可以卸载吗
  • 简易征收是什么意思和一般纳税人
  • centos安装编译环境
  • 怎样让windows media player播放mkv文件
  • 取消默认
  • 如何设置微信语音来电铃声
  • 两台mac怎么同步
  • win10无法双击
  • linux ii
  • 滚小球的实验过程和材料
  • cocos2d开发的知名游戏
  • jQuery Easyui datagrid连续发送两次请求问题
  • Android HandlerThread 实例
  • 学javascript可以干什么工作
  • cocos-2dx
  • 你可能不知道的湖北
  • python 详细
  • 脸部两旁的骨头
  • nodejs递归创建目录
  • 从最近两会看苹果和谷歌的最大梦魇
  • JavaScript 入门·JavaScript 具有全范围的运算符
  • 注册财税公司需要什么条件
  • 市中区税务局办税大厅上班时间
  • 福建高速公路电子发票怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设