首页 > 其他分享 >懂个锤子Vue VueRouter路由深入浅出

懂个锤子Vue VueRouter路由深入浅出

时间:2024-08-05 15:28:25浏览次数:17  
标签:Vue 懂个 VueRouter path 组件 router 路由 页面

VueRouter路由深入浅出

VueRouter 介绍:

Vue Router 是 Vue.js官方的路由管理器:

极大地简化了在 单页面应用程序 SPA-Single Page Application 中构建导航和页面切换的复杂性;

单页面应用程序 SPA

单页面应用程序SPA,Single Page Application

在用户首次访问时加载整个应用程序或核心资源,之后页面切换通过JavaScript动态更新内容,而不需要重新加载整个页面;

用户体验: 提供流畅的导航体验,页面切换快,类似于原生应用,因为内容通常是异步加载的;

技术实现: 依赖前端路由技术,如Vue RouterReact Router等,来管理页面视图的切换;

前后端分离: 前端负责渲染和交互,后端专注于数据处理和API服务;

多页面应用程序 MPA

多页面应用程序MPA,Multi Page Application

每个功能或内容块对应一个独立的HTML页面,用户导航到新页面时,

浏览器会发起新的HTTP请求,加载完整的HTML文档及相关的CSS、JavaScript等资源;

用户体验: 页面切换涉及完整的页面刷新,可能会感觉较慢,因为:每个页面都是独立加载的;

SEO友好: 因为每个页面都是独立的HTML文件,搜索引擎更容易抓取和索引内容

开发方式: 前端和后端的界限不那么明显,通常后端会直接参与视图的渲染;

总结:

单页应用类网站:系统类网站 / 内部网站 / 文档类网站 / 移动端站点,如:网易云音乐 https://music.163.com/

多页应用类网站:公司官网 / 电商类网站,如:京东 https://jd.com/

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

Vue中的路由:

Vue中的路由,即前端路由技术,它处理的是用户在:单页面应用程序SPA中的导航;

Vue Router允许开发者定义不同的URL路径,并将这些路径与特定的Vue组件关联起来:

当用户导航到一个新的URL时,不是加载整个新页面,而是动态地替换当前视图中的内容,展示与新URL相关联的组件;

Vue路由的基本使用:

安装与初始化:

通过NPMCDN获取:Vue Router,vue2.0对应的路由版本:VueRouter3.x

#下载 VueRouter 模块到当前工程,版本3.6.5
yarn add [email protected]				#yarn安装
npm install [email protected] --save		#npm安装

注意:根据Vue版本匹配路由版本: Vue2—VueRouter3.x-Vuex3.xVue3-VueRouter4.x-Vuex4.x

创建对应路由组件

本案例以:网易云网站,举例:src/views/定义路由组件.vue 文件 为了规范代码通常在:

  • src/views文件夹定义:页面组件 - 页面展示 - 配合路由用;
  • src/components文件夹定义:复用组件 - 展示数据 - 常用于复用;

自定义路由页面组件: 这里就不帖代码了;

  • src/views/FindMusic.vue 发现音乐,路由模块;
  • src/views/MyFriend.vue 我的朋友,路由模块;
  • src/views/MyMusic.vue 我的音乐,路由模块;

主应用引入\配置路由

main.js: 文件中引入并使用刚创建的路由器实例;

import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false

//1.下载 v3.6.5 yarn add [email protected]
//2.引入vue-router npm包
import VueRouter from 'vue-router';
// 引入自定义组件页面 views目录) 配规则;
import FindMusic from './views/FindMusic';
import MyFriend from './views/MyFriend';
import MyMusic from './views/MyMusic';
//3.安装注册VueRouter插件初始化
Vue.use(VueRouter);
//4.创建路由对象,定义路由规则
const router = new VueRouter({
  //route: 一条路由规则 { path: 路径, component: 组件 }
  routes: [
    { path: '/findMusic', component: FindMusic },
    { path: '/myFriend', component: MyFriend },
    { path: '/myMusic', component: MyMusic },
  ]
})
//5.注入到new Vue中,建立关联
new Vue({
  render: h => h(App),
  router
}).$mount('#app')

在模板中使用路由

App.vue: 模板目录中通过:<router-view></router-view> 标签来渲染匹配的组件;

  • 运行Demo: http://localhost:8080/#/#/ 表示项目的路由已经被Vue-Router管理了;
<template>
  <div>
    <div class="footer_wrap">
      <a href="#/findMusic">发现音乐</a>
      <a href="#/myFriend">我的朋友</a>
      <a href="#/myMusic">我的音乐</a>
    </div>
    <div class="top">
      <!-- 路由出口 → 匹配的组件所展示的位置 -->
      <router-view></router-view>
    </div>
  </div>
</template>
<script>
  export default {};
</script>
<style><!-- 省略样式代码 --></style>

在这里插入图片描述

路由的封装抽离:

路由的封装抽离是Vue.js项目开发中的一个最佳实践:

它涉及到将路由配置和管理从应用的主入口文件通常是:main.js中分离出来,以提高代码的可维护性和可读性;

1. 创建路由器模块: 在项目的src目录下创建一个router文件夹、文件夹内创建一个index.js文件,这是路由器的配置中心;

2.导入Vue和Vue Router:src/router/index.js 中,首先需要:导入Vue和Vue Router库、定义路由:

//1.下载 v3.6.5 yarn add [email protected]
//2.引入vue-router npm包
import Vue from 'vue'
import VueRouter from 'vue-router';
// 引入自定义组件页面 views目录) 配规则;
import FindMusic from '../views/FindMusic';
import MyFriend from '../views/MyFriend';
import MyMusic from '../views/MyMusic';

//3.安装注册VueRouter插件初始化
Vue.use(VueRouter);
//4.创建路由对象,定义路由规则
const router = new VueRouter({
  //route: 一条路由规则 { path: 路径, component: 组件 }
  routes: [
    { path: '/findMusic', component: FindMusic },
    { path: '/myFriend', component: MyFriend },
    { path: '/myMusic', component: MyMusic },
  ]
})

//对外暴漏router对象;
export default router;

3.在主入口文件中引入路由器:main.js中:导入之前创建的路由器实例,并将其注入到Vue实例中;

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

//引入并配置路由对象;
import router from './router/index';
Vue.config.productionTip = false;

//5.注入到new Vue中,建立关联
new Vue({
  render: h => h(App),
  router
}).$mount('#app');

在这里插入图片描述

Vue路由的进阶使用⏫:

声明式导航-导航链接

声明式导航: 它允许开发者通过在模板中使用<router-link>组件来定义导航链接,从而实现页面间的切换;

<router-link>组件: 它替代了传统的<a>标签,用于创建导航链接,通过设置to(必须)属性指定目标路由;

  • 路径匹配to属性可以是字符串,表示路径,不需要加#,Vue Router会处理路由跳转;

  • 自定义样式: 可以通过这些类名来为激活的链接应用特定的样式,例如高亮显示;

  • 这种方式使得导航逻辑更加清晰,代码更加简洁,易于理解和维护;

<template>
  <div>
    <div class="footer_wrap">
      <router-link to="/findMusic">发现音乐</router-link>
      <router-link to="/myFriend">我的朋友</router-link>
      <router-link to="/myMusic">我的音乐</router-link>
    </div>
    <div class="top">
      <!-- 路由出口 → 匹配的组件所展示的位置 -->
      <router-view></router-view>
    </div>
  </div>
</template>
<script>
  export default {};
</script>
<style>
    <!-- 省略样式代码 -->
    .footer_wrap a.router-link-active {	background-color: purple; }
</style>

在这里插入图片描述

<router-link>默认会添加两个CSS类名来表示链接的激活状态:

  • .router-link-exact-active 通常在,精确匹配 整个路径时添加;

  • .router-link-active 会在链接对应的路由被激活时添加,适用于 模糊匹配 、设置高亮;

为什么 <router-link> 默认添加两个 CSS 类名?

<router-link>默认添加两个CSS类名,是为了提供两种不同级别的激活状态样式控制:

router-link-active:这个类的设计是为了实现包含匹配的激活逻辑

  • 这意味着当路由路径是某个<router-link>路径的前缀时,该类会被激活

  • 例如:当前路由是/users/123,那么所有指向/users/xxx链接都会被标记为活动状态

  • 这种设计考虑到了嵌套路由的场景,使得:父级菜单在子路由被访问时也能保持高亮,增强了导航的上下文感知;

在这里插入图片描述

router-link-exact-active:相对地,这个类仅在路径完全匹配时才被激活,提供了更精确的控制;

声明式导航-自定义类名

Vue Router为了提供更多的定制性,开发者可以自定义<router-link>激活时的CSS类名;

在你的Vue应用初始化时,可以通过以下方式来配置这些类名:

const router = new VueRouter({
  routes: [...], // 路由配置
  linkActiveClass: 'custom-active', 			// 自定义模糊匹配激活类名
  linkExactActiveClass: 'custom-exact-active' 	// 自定义精确匹配激活类名
});

在这里插入图片描述

声明式导航-查询传参

声明式导航是Vue Router中通过<router-link>组件实现的一种导航方式:

既然是导航,那么就会有不同的组件页面进行展示: 如:百度搜索,用户输入内容进行搜索,程序根据内容展示不同的结果;

为了方便操作,通常在: 跳转到另一个路由时,将一些数据作为查询参数附加到URL中,以便接收页面可以访问这些参数;

对此,<router-link> 提供两种传参方式: 查询参数传参、动态路由传参;

查询参数传参:

查询参数传参,比较适合传:多个参数<router-link>to属性中:直接在路径后面使用问号(?)添加查询参数;

格式为: to="/route?param1=value1&param2=value2

views/VHome.vue: 搜索模块页面,导航views/Search.vue带参请求

<template>
  <div class="home">
    <div class="logo-box"></div>
    <div class="search-box">
      <input type="text">
      <button>搜索一下</button>
    </div>
    <div class="hot-link">
      热门搜索:
      <router-link to="/search?key=Java慈祥">Java慈祥</router-link>
      <router-link to="/search?key=热爱学习">热爱学习</router-link>
      <router-link to="/search?key=如何成为前端大牛">如何成为前端大牛</router-link>
    </div>
  </div>
</template>
<script>
  export default { name: 'VHome' }
</script>
<style></style>

接收参数: 在目标组件中,你可以通过$route.query.属性名 来访问这些参数传递值: views/Search.vue

<template>
  <div class="search">
    <!-- 在目标组件中,你可以通过$route.query对象来访问这些参数 -->
    <p>搜索关键字: {{ $route.query.key }} </p>
    <p>搜索结果: </p>
    <ul>
      <li>.............</li>
      <li>.............</li>
      <li>.............</li>
      <li>.............</li>
    </ul>
  </div>
</template>
<script>
  export default {
    name: 'VSearch',
    created () {
      // 在created中,获取路由参数
      // this.$route.query.参数名 获取
      console.log(this.$route.query.key);
    }
  }
</script>
<style></style>

在这里插入图片描述

动态路由传参:

动态路由传参,优雅简洁:适合传单个参数 动态路由通过,在路径中使用冒号 :前缀的占位符来定义;

在这里插入图片描述

动态路由传参可选符

动态路由存在问题: 配了路由 path: "/search/:words" 为什么按下面步骤操作,会未匹配到组件,显示空白;

/search/:words 表示,必须要传参数,如果不传参数,也希望匹配,可以加个可选符 "?"

在这里插入图片描述

Vue路由—重定向

标签:Vue,懂个,VueRouter,path,组件,router,路由,页面
From: https://blog.csdn.net/qq_45542380/article/details/140912703

相关文章

  • vue2 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图
    效果图在vue2、nuxt2项目开发中,详解引入使用高德地图接收热力图数据并渲染“热力图”效果功能,在地图上的某个区域或某个城市(可多个)、省份等自由绘制对应的热力图层,各城市地区同时加载渲染热力流量区域用以对比,根据不同的颜色代表人口密度、客流量、旅游人数、交通流量......
  • Vue的混入(mixin)
    一、mixin是什么我们在开发组件的过程中,常常会遇到一些具有相同逻辑和功能的组件。如果每个组件各写一套方法会导致代码冗余,后期更改的时候也要一个个的改非常的浪费时间和精力。mixins就是将这些多个相同的逻辑抽离出来,各个组件只需要引入mixins,就能实现一次写代码,多组件受益......
  • 计算机毕业设计django+vue二手车管理系统【开题+程序+论文】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着汽车消费市场的日益成熟与二手车交易量的持续增长,构建一个高效、便捷、信息透明的二手车管理系统显得尤为重要。传统二手车交易往往存......
  • ssm+vue高校疫情防控系统的设计与实现【开题+程序+论文】-计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球新冠疫情的持续影响,高等教育机构作为人员密集、流动性大的场所,其疫情防控工作显得尤为重要。传统的疫情管理模式往往依赖于人工统计、纸质报......
  • ssm+vue高校社团管理系统【开题+程序+论文】-计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及与深化,高校社团作为学生自我管理与发展的重要平台,日益成为校园文化不可或缺的一部分。然而,传统的高校社团管理方式往往依赖于纸质......
  • ssm+vue高校本科成绩管理系统设计【开题+程序+论文】-计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校教育规模的不断扩大和信息化技术的飞速发展,传统的手工或简单电子化管理方式已难以满足高校本科成绩管理的复杂需求。当前,高校本科生成绩管理......
  • ssm+vue骨科医院信息管理系统设计实现【开题+程序+论文】-计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着医疗技术的飞速发展和患者需求的日益增长,传统骨科医院的管理模式面临着诸多挑战。信息不对称、流程繁琐、效率低下等问题日益凸显,不仅影响了患者......
  • springboot+vue酒店信息管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展和消费者需求的日益多元化,酒店行业正面临着前所未有的挑战与机遇。传统的酒店管理模式已难以满足现代酒店高效运营、精准服务及客户体验优化的需求。在此背景下,酒店信息管理系统(HotelInformationManagementSys......
  • springboot+vue酒店信息管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,酒店业作为旅游产业链中的重要一环,面临着日益增长的客户需求与激烈的市场竞争。传统的手工管理模式已难以满足现代酒店对高效、精准、个性化服务的需求。在此背景下,开发一套集用户管理、房间类别划分、客房信息展......
  • springboot+vue酒店客房预订系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,酒店行业作为旅游业的重要支柱,面临着日益增长的客户需求和激烈的市场竞争。传统的酒店预订方式,如电话预订或到店预订,已难以满足现代消费者对于便捷性、实时性和个性化服务的高要求。在此背景下,开发一套高效、智能......