当前位置: 首页 > article >正文

vue的路由 vue-router

vue-router 官网:https://router.vuejs.org/zh/

在这里插入图片描述

  1. 如何根据地址中的路径选择不同的组件?
  2. 把选择的组件放到哪个位置?
  3. 如何无刷新的切换组件?

路由插件

# 为了保证和课程一致,请安装3.4.9版本
npm i vue-router@3.4.9

路由插件的使用

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

Vue.use(VueRouter); // Vue.use(插件)  在Vue中安装插件

const router = new VueRouter({
  // 路由配置
})
new Vue({
  ...,
  router
})

基本使用

// 路由配置
const router = new VueRouter({
  routes: [
    // 路由规则
    // 当匹配到路径 /foo 时,渲染 Foo 组件
    { path: '/foo', component: Foo },
    // 当匹配到路径 /bar 时,渲染 Bar 组件
    { path: '/bar', component: Bar },
  ],
});
<!-- App.vue -->
<div class="container">
  <div>
    <!-- 公共区域 -->
  </div>
  <div>
    <!-- 页面区域 -->
    <!-- vue-router 匹配到的组件会渲染到这里 -->
    <RouterView />
  </div>
</div>

路由模式

路由模式决定了:

  1. 路由从哪里获取访问路径
  2. 路由如何改变访问路径

vue-router提供了三种路由模式:

  1. hash:默认值。路由从浏览器地址栏中的 hash 部分获取路径,改变路径也是改变的 hash 部分。该模式兼容性最好。

    http://localhost:8081/#/blog  -->  /blog
    http://localhost:8081/about#/blog  --> /blog
    
  2. history:路由从浏览器地址栏的location.pathname中获取路径,改变路径使用的 H5 的history api。该模式可以让地址栏最友好,但是需要浏览器支持history api

    http://localhost:8081/#/blog  -->  /
    http://localhost:8081/about#/blog  --> /about
    http://localhost:8081/blog  --> /blog
    
  3. abstract:路由从内存中获取路径,改变路径也只是改动内存中的值。这种模式通常应用到非浏览器环境中。

    内存: /			-->   /
    内存: /about	--> /about
    内存: /blog	  --> /blog
    

导航

vue-router提供了全局的组件RouterLink,它的渲染结果是一个a元素

<RouterLink to="/blog">文章</RouterLink>
<!-- mode:hash 生成 -->
<a href="#/blog">文章</a>
<!-- mode:history 生成 -->
<!-- 为了避免刷新页面,vue-router实际上为它添加了点击事件,并阻止了默认行为,在事件内部使用hitory api更改路径 -->
<a href="/blog">文章</a>

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

激活状态

默认情况下,vue-router会用 当前路径 匹配 导航路径

  • 如果当前路径是以导航路径开头,则算作匹配,会为导航的 a 元素添加类名router-link-active
  • 如果当前路径完全等于导航路径,则算作精确匹配,会为导航的 a 元素添加类名router-link-exact-active

例如,当前访问的路径是/blog,则:

导航路径类名
/router-link-active
/blogrouter-link-active router-link-exact-active
/about
/message

可以为组件RouterLink添加 bool 属性exact,将匹配规则改为:必须要精确匹配才能添加匹配类名router-link-active

例如,当前访问的路径是/blog,则:

导航路径exact类名
/true
/blogfalserouter-link-active router-link-exact-active
/abouttrue
/messagetrue

例如,当前访问的路径是/blog/detail/123,则:

导航路径exact类名
/true
/blogfalserouter-link-active
/abouttrue
/messagetrue

另外,可以通过active-class属性更改匹配的类名,通过exact-active-class更改精确匹配的类名

命名路由

使用命名路由可以解除系统与路径之间的耦合

// 路由配置
const router = new VueRouter({
  routes: [
    // 路由规则
    // 当匹配到路径 /foo 时,渲染 Foo 组件
    { name: 'foo', path: '/foo', component: Foo },
    // 当匹配到路径 /bar 时,渲染 Bar 组件
    { name: 'bar', path: '/bar', component: Bar },
  ],
});
<!-- 向to属性传递路由信息对象 RouterLink会根据你传递的信息以及路由配置生成对应的路径 -->
<RouterLink :to="{ name:'foo' }">go to foo</RouterLink>

http://www.kler.cn/a/545225.html

相关文章:

  • DeepSeek与Web3:科技融合的新纪元
  • ES节点配置的最佳实践
  • Win10环境使用Dockerdesktop部署Dify集成Deepseek
  • 新数据结构(9)——Java异常体系
  • 小米CyberGear电机 STM32软件修改CAN_ID
  • 基于Flask的软科中国大学排名数据可视化分析系统的设计与实现
  • github与git bash绑定问题
  • 【面试】面试常见的智力题
  • el-select 设置宽度 没效果
  • 无人机生态环境监测、图像处理与GIS数据分析综合实践技术应用
  • 【Redis存在线程安全问题吗?】
  • 前沿科技一览当今创新技术趋势
  • 硬件学习笔记--41 电磁兼容试验-5 射频场感应的传导干扰试验介绍
  • MongoDB 的批量查找符号
  • 青少年编程与数学 02-009 Django 5 Web 编程 11课题、模板系统
  • MySQL 2025 January GA Releases 都发布了啥功能[译]
  • IPoIB模块初始化过程详解
  • HCIA项目实践---OSPF的知识和原理总结
  • 【后端开发】面试题-redis
  • 3.【线性代数】——矩阵乘法和逆矩阵