当前位置:首页 > 技术分析 > 正文内容

Vue Router模拟多页面效果_vue router mode history

ruisui884个月前 (02-13)技术分析18

我们都知道,在以前想要写多页面的时候,一般都会创建多个html,比如我们需要十个页面,就要创建十个html,然后通过标签来进行跳转,这样子很难达到复用,比如我们的页面头部都是同一个头部,如果运用原生JS来写,那不得每个html都写一份头部???太麻烦了, 复制粘贴都会累死人。

而Vue是一款轻量级、高性能的前端框架,专为构建单页面应用而设计。而单页面应用的核心优势在于能够提供平滑的用户体验,无需每次页面跳转都重新加载整个页面,仅需局部刷新或替换视图组件即可。然而,为了实现这种无缝的页面跳转和视图管理,我们需要一个强大的路由管理系统——Vue Router。而这个强大的路由管理系统巧妙的将我们的单页面变成了一个“多页面”,但却不是真正的多页面,根据前面的学习,我们都知道我们写的组件里的代码最终都会挂载在根节点app上,然后才回去展示,那么说白了还是单页面,只是在我们点击跳转页面的时候,将之前的那段代码剔除掉,拿出我们需要展示的代码挂载在根节点上去展示出来,而这就是我们Vue Router所需要做的。

Vue Router简介及配置

vue-router是Vue.js框架的官方路由管理器,专门设计用于构建单页面应用(Single Page Applications,SPA)。在单页面应用中,多个“页面”或视图共享同一个HTML文档,路由的作用是在单页应用 (SPA) 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时,URL 会随之更新,但页面不需要从服务器重新加载。简单来说,就是当我们去到不同的URL路径中时,展示不同的代码片段,或者说展示不同的vue组件。模拟当url改变时,切换显示不同的组件,实现成多页的效果,只是模拟成多页的效果。

这样我们就可以调用vue-router里面的router-link和router-view了。

简单实现一下

做个简单的框架来看看效果:

  1. 创建一个views文件夹,里存放一些组件,用来展示

  2. 然后在根组件App中写入下面这些代码看看

  3. 配置好相关的路由规则:(当你点击首页时,他的to与路由中的path命中,只要命中就会在 所在的位置(页面或者说组件里)显示出来,而此时页面上的导航栏就会在后面加上/home)
  4. js
  5. 代码解读
  6. 复制代码
  7. import { createRouter ,createWebHistory} from "vue-router"; import Home from '../views/Home.vue'; const routes =[ { path:'/home', component:Home } ] const router = createRouter({ history: createWebHistory(), // routes : routes 可以省略 routes }) export default router

4.在Home.vue文件中写入

home page

,看看能不能出来

  1. OK,再将其他的路由配置完:(这里采用另外一个组件的加载方式--组件的懒加载,效果是一模一样的,只有当你点击要去到该url中的时候才会加载出来,可以让初始页面更快地加载出来)

  2. 出来的效果肯定也是一样的。然而现在要在Home.vue 中整个按钮,要求点击这个按钮我就可以去到hot页面,那我们就要创建个点击事件咯,然后跳转到/hot这个url的页面来看看怎么实现的吧

  3. 创建一个按钮,并且绑定点击事件,调用vue-router库中的useRouter的方法,用Router对Vue Router实例的进行引用,在定义了一个箭头函数goHot,用于处理点击按钮后的逻辑。函数内部先使用console.log(router);记录router对象,可以看到里面有个push的方法可以让我们跳转到指定页面,当然你会发现还有一个方法resolve也可以,不过这俩个还是有点区别的,官方不可能创建俩个一样的功能的方法:push是用于直接跳转到一个路由,它会在浏览器的历史堆栈中添加一个新的记录,点击后退按钮会回到前一个路由。但是resolve用于获取一个路由的完整信息,包括 URL,将这个路由替换掉之前的路由,点击后退按钮不会回到前一个路由,会提留在当前路由。不过一般我们都是用push
  4. 这样子我们也可以实现跳转:

所以,我们就有两种路由跳转的方式:

  1. 使用router-link进行跳转
  2. 使用router.push() 进行跳转,这是编程式路由跳转

参数传递

在 Vue Router 中,我们可以向路由传递参数,有两种主要的方式:

  1. Query 参数:这类似于 URL 后面的查询字符串,可以通过 query 对象传递。
  2. 传递:
  3. Javascript
  4. 代码解读
  5. 复制代码
  6. router.push({path: '/hot', query: {id: '123'}});
  7. 接收:
  8. Javascript
  9. 代码解读
  10. 复制代码
  11. console.log($route.query.id);
  12. Params 参数:这是在路由路径中定义的参数,需要在定义路由时指定。
  13. 传递:
  14. Javascript
  15. 代码解读
  16. 复制代码
  17. router.push({name: 'hot', params: {id: '123'}});
  18. 这里我们需要将配置路由修改一下:
  19. Javascript
  20. 代码解读
  21. 复制代码
  22. { path: '/hot/:id', name: 'hot', component: () => import('../views/Hot.vue'), props: true }
  23. 接收:
  24. Javascript
  25. 代码解读
  26. 复制代码
  27. console.log($route.params.id);
  28. 或者通过 defineProps函数:
  29. Javascript
  30. 代码解读
  31. 复制代码
  32. const props = defineProps({ id: String, }); console.log(props.id);

通过修改我们可以得到以下结果:

写在最后

Vue Router 是 Vue.js 官方的路由管理器,用于在单页面应用中实现多页面体验。它通过局部刷新或替换视图组件,避免了每次页面跳转时重新加载整个页面,从而提升了用户体验。下一步,我将使用这些基础知识,去构建一个简单的登录系统,实操一下,在编译过程中继续学习

ps:可以去vue Router官方文档进行学习哦:Vue Router


原文链接:
https://juejin.cn/post/7389049604631330843

标签: vue路由权限
分享给朋友:

“Vue Router模拟多页面效果_vue router mode history” 的相关文章

Gitlab+Jenkins通过钩子实现自动部署web项目,图文详细教程

扩展参考:Jenkins+Gitlab通过脚本自动部署回滚web项目至集群 一:基础环境介绍及准备1):Gitlab服务器:ubuntu 192.168.152.131 ---参考搭建:Linux安装gitlab,docker安装gitlab教程2):Jenkins服务器:ubunu 192.168...

学无止境:Git 如何优雅地回退代码

来源:https://zhenbianshu.github.io前言从接触编程就开始使用 Git 进行代码管理,先是自己玩 Github,又在工作中使用 Gitlab,虽然使用时间挺长,可是也只进行一些常用操作,如推拉代码、提交、合并等,更复杂的操作没有使用过,看过的教程也逐渐淡忘了,有些对不起 L...

VIM配置整理

一、基本配色set number set showcmd set incsearch set expandtab set showcmd set history=400 set autoread set ffs=unix,mac,dos set hlsearch set shiftwidth=2 s...

摄影后期必看 | PS插件camera raw 16.4教程 | 范围蒙版

范围蒙版Camera Raw 【蒙版】模块中提供了三个范围蒙版工具,可以通过特定的范围来创建蒙版。此次新增的【范围蒙版】大大加强了acr插件对局部调整的能力。点击下拉小箭头可以看到【颜色范围】,可用于快速选择想要编辑的颜色。快捷键:Shift + C【明亮度范围】,可用于快速选择想要调整的明亮度。快...

全新斯柯达柯珞克Karoq深度评测:大众替代品

“斯柯达柯珞克是一款出色的全能家庭 SUV,具有许多有用的功能”价格36,605 英镑- 49,190 英镑优点方便的 VarioFlex 后排座椅非常适合家庭入住驾驶乐趣缺点保修期短保守的内饰性格比Yeti少结论——斯柯达柯珞克是一辆好车吗?斯柯达柯珞克是在辉煌的七座 斯柯达柯迪亚克之后推出的,因...

数组、去重、排序、合并、过滤、删除

ES6数字去重 Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4] [...new Set([1,2,3,3,4,4])] //[1,2,3,4]2、ES6数字排序 [1,2,3,4].sort(); // [1, 2,3,4],默认是升序...