FE_VUE路由 细致解读router/index.js的配置

news2024/10/2 1:33:22

1 安装vue-router插件

安装vue-router,命令:npm i vue-router 【npm i vue-router@3】,在main.js 中引入路由文件: import router from './router', 注意router 不要变且为小写;注册路由(因为main.js是程序的主入口,在里面注册后,程序运行起来才会自动读取路由信息),请看以下代码:
在这里插入图片描述

2 创建路由文件

一般路由文件单独放在router文件夹,在src目录下,创建router文件夹,文件夹下,创建index.js,用来实现路由的创建。
在这里插入图片描述
vue中的router 需要用到vue 和vue-router 两个依赖,请看一下代码:
在这里插入图片描述

3 重要参数讲解

在这里插入图片描述
在这里插入图片描述

3.1 针对 name 的讲解:命名路由

1)作用:可以简化路由的跳转。
2)如何使用:给路由命名:

在这里插入图片描述
然后简化组件的跳转:
在这里插入图片描述

3.2 针对 vue-router中meta属性 的讲解:

简单地说meta就是路由元信息,也就是每个路由身上携带的信息。通过meta对象中的一些属性来判断当前路由是否需要进一步处理,如果需要处理,按照自己想要的效果进行处理。通常在定义路由的时候配置 meta 字段:由以下代码也可看出meta的作用之一就是可以动态显式网页标题。

const routes = [
	{
        name:'home',
        path:'/',
        meta:{
            title:'首页'
        },
        component:Home
    },
    {
        name:'login',
        path:'/login',
        meta:{
            title:'登录'
        },
        component:Login
    }
]

meta的应用举例:
首先我们知道,keep-alive属性具有缓存作用,被keep-alive标签包裹的组件会默认被缓存。如下代码:

<keep-alive>
    <router-view></router-view>
    //多个路由呈现的位置
</keep-alive>

比如有100个组件,其中有一些需要缓存,有一些不需要,那么需要怎么做呢?这时候用meta属性来协助就会方便很多。

<template>
  <div id="app">
      <keep-alive v-if="$route.meta.isKeepAlive">
        <router-view/>
      </keep-alive>
 
      <keep-alive v-if="!$route.meta.isKeepAlive">
        <router-view/>
      </keep-alive>
  </div>
</template>

在router.js中给路由的meta对象添加属性时,可以使用$route.meta.xxx来获取这个属性的状态。在这里,可以使用v-if判断组件是否被缓存。在router.js中的定义如下:

const router = new VueRouter({
    routes:[
        {
            path:'/',
            name:'home',
            component:home,
            meta:{isKeepAlive:true}
        },
        {
            path:'/news',
            name:'news',
            component:news,
            meta:{isKeepAlive:true}
        },
        {
            path:'/play',
            component:play,
            meta:{isKeepAlive:false}
        },
        ......
    ]
})

当isKeepAlive的值为true时,组件会被自动缓存,当isKeepAlive的值为false时,组件默认不被缓存。

3.3 带参数路由跳转

3.3.1 路由的query参数

在这里插入图片描述

  1. 路由的query参数
    1)作用:跳转的时候传递参数
    2)如何使用:跳转路由并携带query参数,有两种写法:
<ul>
      <li v-for="item in messageList" :key="item.id">
        <!-- 跳转路由并携带query参数,to的字符串写法 -->
        <!--        <router-link :to="`/home/message/detail?id=${item.id}&title=${item.title}`">{{ item.title }}</router-link>&nbsp;&nbsp;-->
        <!-- 跳转路由并携带query参数,to的对象写法 -->
        <router-link :to="{
          path: '/home/message/detail',
          query: {
            id: item.id,
            title: item.title
          }
        }">{{ item.title }}
        </router-link>
      </li>
    </ul>

  1. 首先,新建一个三级路由组件 Detail.vue
    在这里插入图片描述
  2. 然后,我们在路由器中配置三级路由:
    在这里插入图片描述
  3. 然后,我们在修改组件Message.vue
    在这里插入图片描述

3.3.2 路由的params参数

  1. 配置路由,在路由器中必须声明接收params参数
    在这里插入图片描述

  2. 传递参数 【params 传值 只能是 name】特别注意:路由携带params参数时,若使用to的对象写法,则不能使用path配置项,必须使用name配置!
    在这里插入图片描述

  3. 接收参数
    在这里插入图片描述

3.3.3 路由的props配置

功能是 :让路由组件更方便的收到参数

  1. props的第一种写法,值为对象,该对象中的所有key-value都会以props的形式传给Detail组件 - 死的数据
    在这里插入图片描述
    在这里插入图片描述
  2. props的第二种写法,值为布尔值,若布尔值为真,就会把该路由组件收到的所有params参数,以props的形式传给Detail组件

在这里插入图片描述
在这里插入图片描述

  1. props的第三种写法,值为函数,该函数返回的对象中每一组key-value都会通过props传给Detail组件
    在这里插入图片描述

在这里插入图片描述

4 router-link的push && replace属性

点击页面所经过的url都会保存到栈中 (push模式)【默认的工作方式就是push模式】

...
...
4 http://localhost:8080/#/home/message/detail?id=001&title=%E6%B6%88%E6%81%AF001
3 http://localhost:8080/#/home/message
2 http://localhost:8080/#/Home
1 http://localhost:8080/#/

1)作用:控制路由跳转时操作浏览器历史记录的模式。
2)浏览器的历史记录有两种写入方式,分别为push和replace,push是追加历史记录,replace是替换当前记录。路由跳转时候默认为push。
3)如何开启replace模式:

      <router-link replace active-class="active" :to="{
        name: 'guanyu'
      }"> About</router-link>

5 编程式路由导航

编程式路由导航作用:不借助router-link实现路由跳转,让路由跳转更加灵活。router-link 其实是一种a标签的方式实现路由跳转的,但是,如果是button 或者是无须用户操作的自动跳转,就无法实现路由跳转了吗?

在这里插入图片描述
在这里插入图片描述
this.$router.push() :跳转到指定url路径,并向history栈中添加一个记录,点击后退会返回到上一个页面。

【1】带参数:页面通过path/name和query传递参数,(刷新页面后参数不会丢失,query传参的参数会带在url后边展示在地址栏(/home?user=test),类似get请求)目标页面通过this.$route.query获取参数。
示例:
跳转path=‘/home’的路由并且传递参数selected=1 :

this.$router.push({path: '/home', query: {selected: "2"}});

目标页面获取selected参数:

this.$route.query.selected

【2】带参数:页面通过name和params传递参数 (刷新页面后参数会丢失,url参数不展示在地址来,类似post请求)
跳转name=‘register’的路由并且传递参数user=测试用户 :

this.$router.push({name: 'register', params: {user: '测试用户'}});

目标页面获取user参数值:

this.$route.params.user

示例:
在这里插入图片描述
找到router文件中name='register’路由:
在这里插入图片描述
在src/view/register/index.vue 中取参数

在这里插入图片描述
后退,前进 页面操作
在这里插入图片描述
在这里插入图片描述

      // 前进三步
      this.$router.go(3)
      // 后退三步
      this.$router.go(-3)

6 关于vue的scrollBehavior(滚动行为)

咱们在实际开发中会遇到一个问题:

我们在一个很长的列表页往下拉,然后点击列表中的某一个数据进入到详情页查看。此时我们决定返回列表也继续查看列表。
很多情况下,由于列表页的组件已经被销毁,所以我们返回到列表页后页面会置顶,不得不又重新下拉查看列表,这样就做了很多没有必要的操作,也是不符合用户的预期。用户希望当我查看玩详情页以后返回,返回列表页的位置是刚刚浏览的位置。

  1. 使用<keep-alive> 缓存,即不销毁列表页
<template>
  <div id="app">
    <!-- <router-view/> -->
    <keep-alive>
        <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive" />
  </div>
</template>

router.js中

 routes: [
    {
      path: '/',
      name: 'List',
      //component: List
      component: () => import('./views/index/list.vue'),
      meta: {
        keepAlive: true // 需要缓存
      }
    },
    {
      path: '/content/:contentId',
      name: 'content',
      component: () => import('./views/index/content.vue'),
      meta: {
        keepAlive: false // 不需要缓存
      }
    },
]

详情页面不需要缓存,列表页面需要缓存

  1. 使用路由守卫,原理就是在beforRouterLeave的路由钩子记录当前页面滚动位置
//在页面离开时记录滚动位置,这里的this.scrollTop可以保存在vuex的state或者浏览器本地
beforeRouteLeave (to, from, next) {
    this.scrollTop = document.documentElement.scrollTop || document.body.scrollTop
    next()
  },

//进入该页面时,用之前保存的滚动位置赋值
beforeRouteEnter (to, from, next) {
    next(vm => {
      document.body.scrollTop = vm.scrollTop
    })
  },

这里的 this.scrollTop 可以保存在vuex的state或者浏览器本地

  1. 使用vue-router方法scrollBehavior(推荐)
    router.js中
const scrollBehavior = function scrollBehavior (to, from, savedPosition) {
  if (savedPosition) {
    return savedPosition;
  }else {
      return { x: 0, y: 0 }
   }
};
const router = new Router({
  routes,
  scrollBehavior,
});

该方案直接在路由进行处理,兼容每个页面并且页面加载完后并也不会产生1px的滚动位置。

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

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

相关文章

商场室内地图导航如何实现?商场室内导航地图怎么做?

商场室内地图导航如何实现&#xff1f;现在&#xff0c;消费者的消费观念和消费心理日趋成熟&#xff0c;对于购物商场的要求也愈加挑剔。电子地图作为大家最喜闻乐见的高效应用形式&#xff0c;能够在顾客购物的过程中带来非常大的帮助和体验&#xff0c;对于在大型的综合商场…

抖音电商的新增量在哪里?

“抖音电商涨不动了&#xff0c;才提出做货架”&#xff0c;“抖音做不好货架”……去年&#xff0c;抖音电商提出做“全域兴趣电商”&#xff0c;当时业内外有鼓励&#xff0c;也有不看好的声音。一年过去&#xff0c;5月16日&#xff0c;抖音电商总裁魏雯雯回应了质疑&#x…

Python可视化工具分享

今天和大家分享几个实用的纯python构建可视化界面服务&#xff0c;比如日常写了脚本但是不希望给别人代码&#xff0c;可以利用这些包快速构建好看的界面作为服务提供他人使用。有关于库的最新更新时间和当前star数量。 1、 streamlit (23.3k Updated 2 hours ago) Streamlit…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(I.MX6U驱动GPT定时器中断实现高精度延时) 2023.5.19

目录 前言整体文件结构源码分析&#xff08;保姆级讲解&#xff09;初始化延时函数部分&#xff1a;微秒(us)级延时部分毫秒(ms)级延时部分主函数main部分 编译下载结束语 前言 在上一讲过程中我们使用了EPIT定时器来实现了定时器中断&#xff0c;从而解决了按键消抖的问题。但…

ChatGPT与深度学习的完美融合:打造智能化推荐系统新时代

PNN | AutoRec | 推荐算法 NFM | ChatGPT | 深度学习 新技术如ChatGPT、LLM、AIGC等的兴起&#xff0c;使推荐系统拥有更强的学习和预测能力。然而&#xff0c;推荐算法仍然是深度学习推荐系统中不可或缺的关键技术。推荐算法和这些技术应相辅相成&#xff0c;相互补充。推荐…

五大向量数据库入门横评

本文内容节选自 Paxi.ai 文章分享&#xff0c;Paxi.ai是一个基于GPT-4打造的帮助用户快速使用AI的AI工具&#xff0c;对内容感兴趣的朋友可以上他们官网查看。 从OpenAI发布GPT以来&#xff0c;AI尤其以LLM为代表的项目发展迅速&#xff0c;相信大家已经了解到大语言模型的魅力…

apk 作为资源提供 aar 的过程

1&#xff1a;参考&#xff1a;Android将APK项目封装为SDK(AAR) https://blog.csdn.net/weixin_51522235/article/details/128216091 四大点&#xff1a;1: apply plugin:com.android.library 2:去掉&#xff1a;applicationId 3:去掉&#xff1a;applicationVariants.all…

MySQL:触发器、权限管理

一、学习目标 了解什么是触发器掌握创建触发器的方法掌握查看触发器的方法掌握触发器的使用技巧掌握删除触发器的方法熟练掌握使用触发器的方法和技巧了解什么是权限表掌握权限表的用法掌握账户管理的方法掌握权限管理的方法掌握访问控制的方法熟练掌握新建用户的方法和技巧了…

小程序加weui或者TDesign安装

WeUI样式库展示&#xff1a;https://weui.io/ 微信官方WeUI相关文档&#xff1a;https://wechat-miniprogram.github.io/weui/docs/ WeUI-wxss 项目地址&#xff1a;https://github.com/Tencent/weui-wxss 安装 &#xff0c;1.先安装node.js 2.建立或者打开已经有的项目。…

【SolVES 模型】生态系统服务功能社会价值评估(基于多源环境QGIS、PostgreSQL、ArcGIS、Maxent、R语言)

SolVES模型&#xff08;Social Values for Ecosystem Services&#xff09;全称为生态系统服务社会价值模型&#xff0c;是由美国地质勘探局和美国科罗拉多州立大学联合开发的一款地理信息系统应用程序&#xff0c;开发该模型的目的主要是对生态系统服务功能中的社会价值进行空…

敏捷与瀑布:哪种项目管理方法适合你的企业?

​良好的项目管理可以改变企业的工作流&#xff0c;在减少混乱因素的同时注入方向和组织性。 同时&#xff0c;"项目管理 "对每个人来说并不意味着完全相同的事情。在企业及其客户中&#xff0c;最重要的两种项目管理方法是敏捷和瀑布。而这两种风格之间的差异很大&…

Redis是单线程还是多线程?揭开性能之谜!

大家好&#xff0c;我是小米&#xff0c;在这个充满技术乐趣的小天地里&#xff0c;今天我们来探讨一个备受争议的话题——Redis是单线程还是多线程&#xff1f;这个问题一直困扰着Redis的用户&#xff0c;让我们一起揭开性能之谜吧&#xff01; Redis作为一款高性能键值存储系…

交换机故障恢复

通常情况下&#xff0c;可以为交换机设置enable密码来提供安全&#xff0c;在没有enable密码的情况下&#xff0c;无法对交换机修改任何配置&#xff0c;因此&#xff0c;在忘记enable密码的时候&#xff0c;就意味着无法改动交换机信息。但是&#xff0c;如果能够物理上接触到…

实施办公自动化系统需要注意什么?

办公自动化系统的好处很容易理解。几乎每个企业都会欢迎更高的准确性、效率和利润率。办公自动化这个过程似乎势不可挡&#xff0c;那么该如何实现和管理呢&#xff1f; 决定自动化的内容 在实施办公自动化系统之前&#xff0c;企业将需要花时间研究哪些具体的流程需要自动化…

Go语言核心编程-基本数据类型篇

第 3 章 Golang 变量 3.1 为什么需要变量 3.1.1一个程序就是一个世界 3.1.2变量是程序的基本组成单位 不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位&#xff0c;比如一个示意图&#xff1a; func getVal(numl int, num2 int) (int, int) {sum : num1 n…

【数字敏捷性】上海道宁与​SolarWinds为您提供全面的可观察性、IT 服务管理和数据库管理

SolarWinds Platform是 业界先进的统一监控 可观察性和服务管理平台 它是新一代SolarWinds 可观察性解决方案的基础 并提供了我们如何 为客户解决可观察性挑战的架构 网络管理工具 从配置和流量智能到 性能监控和拓扑映射 可以轻松查看、理解和解决问题 一种集成的多…

【数据结构】--单链表力扣面试题②反转链表

目录 法一&#xff1a;直接反转法 法二&#xff1a;头插法 题述&#xff1a;给你单链表的头结点head&#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 题目已知链表创建&#xff0c;并给了reverseList的函数头。 struct ListNode* reverseList(struct ListNode* he…

Maven属性与版本管理

文章目录 1 属性1.1 问题分析1.2 解决步骤步骤1:父工程中定义属性步骤2:修改依赖的version 2 配置文件加载属性步骤1:父工程定义属性步骤2:jdbc.properties文件中引用属性步骤3:设置maven过滤文件范围步骤4:测试是否生效 3 版本管理 在这一章节内容中&#xff0c;我们将学习两个…

ROS学习(1)——ROS1和ROS2的区别

因为机器人是一个系统工程&#xff0c;它包括了机械臂结构&#xff0c;电子电路&#xff0c;驱动程序&#xff0c;通信框架&#xff0c;组装集成&#xff0c;调试和各种感知决策算法等方面&#xff0c;任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 。但是我们又希…

【黑科技】基于GPT开发的4款免费AI办公神器,实用又强悍!

今天给大家推荐4个非常实用且非常强悍的工具&#xff0c;基于GPT开发的AI工具 &#xff0c;每一款都能够大大提升我们的学习和工作效率 &#xff0c;希望你能看到并在收藏的同时点个赞或关注&#xff0c;万分感谢 。 Chat2doc 这是一个对学生党和打工人都特别有用的AI工具 &a…