首页 > 其他分享 >Vue学习计划-Vue3--核心语法(六)路由

Vue学习计划-Vue3--核心语法(六)路由

时间:2024-01-17 10:07:05浏览次数:35  
标签:Vue title -- import Vue3 vue router path 路由

1. 路由

  1. 【对路由的理解】 理解.png

  2. 【基本切换效果】

  • Vue3中要使用vue-router的最新版本,目前是4版本
  • 路由配置文件代码如下:
// 创建一个路由器,并暴露出去
// 第一步:引入createRouter
import { createRouter, createWebHistory } from 'vue-router'
// 引入一个一个可能要呈现组件
import Home from '../components/Home.vue'
import News from '../components/News.vue'
import About from '../components/About.vue'
// 第二步:创建路由器并暴露出去
export default createRouter({
  history: createWebHistory(),//路由器的工作模式
  routes: [//一个一个的路由规则
    {
      path: '/home',
      component: Home
    },
    {
      path: '/news',
      component: News
    },
    {
      path: '/about',
      component: About
    }
  ]
})
  • main.ts代码如下:
// 引入createApp用于创建应用
import { createApp } from 'vue'
// 引入App根组件
import App from './App.vue'
// 引入路由器
import router from './router'
// 创建一个应用
const app = createApp(App)
// 使用路由器
app.use(router)
// 挂载整个应用到app容器中
app.mount('#app')
  • App.vue代码如下:
<template>
  <div class="app">
    <h2 class="title">Vue路由测试</h2>
    <!-- 导航区 -->
    <div class="navigate">
      <RouterLink to="/home" active-class="active">首页</RouterLink>
      <RouterLink to="/news" active-class="active">新闻</RouterLink>
      <RouterLink to="/about" active-class="active">关于</RouterLink>
    </div>
    <!-- 展示区 -->
    <div class="main-content">
      <RouterView></RouterView>
    </div>
  </div>
</template>

<script lang="ts" setup name="App">
  import {RouterLink,RouterView} from 'vue-router';
</script>
  1. 【两个注意点】
  • 路由组件通常存放在pagesviews文件夹,一般组件通常放在components文件夹
  • 通过点击导航,视觉效果上“消失”了的路由组件,默认是被卸载的,需要的时候再去挂载
  1. 【路由器工作模式】
  • history模式

优点:URL更加美观,不带有#,更接近传统的网站URL 缺点: 后期项目上线,需要服务端配合处理路径问题,否则刷新会有404错误

  const router = createRouter(
    history: createWebHistory(), // history模式
    ...
  )
  • hash模式

优点: 兼容性更好,因为不需要服务端处理路径 确定:URL带有#不美观,且在SEO优化方面相对较差

  const router = createRouter(
    history: createWebHashHistory(), // hash模式
    ...
  )
  1. to的两种写法】
<RouterLink to="/news" active-class="active">新闻</RouterLink>
<RouterLink :to="{path: '/about'}" active-class="active">关于</RouterLink>
  1. 【命名路由】

    1. 作用:可以简化路由跳转及传参
    2. 给路由规则命名:
    {
      name: 'zhuye',
      path: '/home',
      component: Home
    },
    {
      name: 'xinwen',
      path: '/news',
      component: News
    },
    {
      name: 'guanyu',
      path: '/about',
      component: About
    }
    
    1. 跳转路由:
    <RouterLink :to="{name: 'xinwen'}" active-class="active">新闻</RouterLink>
    
  2. 【嵌套路由】

    1. 编写News的子路由:Detail.vue
    2. 配置路由规则,使用Children配置项
    export default createRouter({
      history: createWebHistory(),//路由器的工作模式
      routes: [//一个一个的路由规则
        {
          name: 'zhuye',
          path: '/home',
          component: Home
        },
        {
          name: 'xinwen',
          path: '/news',
          component: News,
          children: [
            {
              path: 'detail',
              component: Detail
            }
          ]
        },
        {
          name: 'guanyu',
          path: '/about',
          component: About
        }
      ]
    })
    
    1. 跳转路由(记得要加完整路径)与展示区<RouterView/>
    <ul>
      <li v-for="news in newsList" :key="news.id">
        <RouterLink to="/news/detail">{{ news.title }}</RouterLink>
      </li>
    </ul>
     <!-- 展示区 -->
    <div class="news-content">
      <RouterView></RouterView>
    </div>   
    
  3. 【路由传参】

  • query参数
    1. 传递参数
     <!-- query传参 第一种 -->
      <RouterLink :to="`/news/detail?id=${news.id}&title=${news.title}&content=${news.content}`">{{ news.title }}</RouterLink>
      <!-- query传参 第二种 -->
      <RouterLink 
      :to="{
        path: '/news/detail',
        query: {
          id: news.id,
          title: news.title,
          content: news.content,
        }
      }"
    >
      {{ news.title }}
    </RouterLink>
    
    1. 接收参数
    <template>
    <div>
        <h2> 编号:{{ query.id }} </h2>
        <h2> 标题:{{ query.title }} </h2>
        <h3> 内容:{{ query.content }} </h3>
    </div>
    </template>
    
    <script setup lang="ts" name="Detail">
    import {toRefs} from 'vue'
    import { useRoute } from 'vue-router';
    let route = useRoute()
    const { query } = toRefs(route)
    </script>
    
  • params参数
    1. 传递参数
    // 1. router文件中
    {
      name: 'xinwen',
      path: '/news',
      component: News,
      children: [
        {
          name: 'xiangqing',
          path: 'detail/:id/:title/:content',
          component: Detail
        }
      ]
    },
    // 2. news文件传递参数
      <!-- params传参 第一种 -->
      <RouterLink :to="`/news/detail/${news.id}/${news.title}/${news.content}`">{{ news.title }}</RouterLink>
    
      <!-- params传参 第二种 -->
      <RouterLink 
      :to="{
        name: 'xiangqing',
        params: {
          id: news.id,
          title: news.title,
          content: news.content,
        }
      }"
    >
      {{ news.title }}
    </RouterLink>
    
    1. 接收参数
    <template>
    <div>
        <h2> 编号:{{ params.id }} </h2>
        <h2> 标题:{{ params.title }} </h2>
        <h3> 内容:{{ params.content }} </h3>
    </div>
    </template>
    
    <script setup lang="ts" name="Detail">
    import {toRefs} from 'vue'
    import { useRoute } from 'vue-router';
    let route = useRoute()
    const { params } = toRefs(route)
    </script>
    

备注:

  1. 传递params参数时:若使用to的对象写法,必须使用name配置项,不能用path
  2. 传递params参数时:需要提前在规则中占位
  3. 传递params参数时:传递参数属性不能是对象类型
  4. 传递params参数时:若是非必传,占位后加?,如:path: 'detail/:id/:title?/:content?'
  1. 【路由的props配置】
  • 作用:让路由组件更方便的收到参数(可以将路由参数作为props传给组件)
// router中配置路由规则
{
  name: 'xiangqing',
  // path: 'detail/:id/:title/:content', // params传参
  path: 'detail',// query传参
  component: Detail,
  // 1. props的布尔值写法,作用:把收到了每一组params参数,作为props传给Detail组件
  // props: true
  //2.  props的函数写法,作用:把返回的对象中每一组key-value作为props传给Detail组件
  props(route){ // 参数route就是路由信息,可以解决query传参
    return route.query
  }
    //3.  props的对象写法,作用:把对象中每一组key-value作为props传给Detail组件
  //  props: { // 
  //   id: '111',
  //   title: '2222',
  //   content: '333'
  // }
}
// 接收参数
<template>
  <div>
      <h2> 编号:{{ id }} </h2>
      <h2> 标题:{{ title }} </h2>
      <h3> 内容:{{ content }} </h3>
  </div>
</template>

<script setup lang="ts" name="Detail">
  defineProps(['id', 'title', 'content'])
</script>
  1. replace属性】

    1. 作用:控制路由跳转时操作浏览器历史记录的模式
    2. 浏览器的历史记录有两种写入方式:分别是pushreplace:
    • push是追加历史记录(默认值)
    • replace是替换当前记录
    1. 开启replace模式: <RouterLink replace ... >News</RouterLink>
  2. 【编程式导航】 路由组件的两个重要的属性: $route$router变成了两个`hooks

import {useRoute,useRouter} from 'vue-router'

const route = useRoute()
const router = useRouter()

console.log(route.query)
console.log(route.parmas)
console.log(router.push)
console.log(router.replace)
  1. 【重定向redirect
    1. 作用:将特定的路径,重新定向到已有路由
    2. 具体编码:
    // 不输入路径自动跳转
    {
      path: '/',
      redirect: '/about'
    },
    // 无法匹配重定向 随便输入路径,未匹配到做重定向
    {
      path: '/:pathMatch(.*)*',
      redirect: '/news'
    }
    

标签:Vue,title,--,import,Vue3,vue,router,path,路由
From: https://blog.51cto.com/Itstars/9284641

相关文章

  • 信管知识梳理(五)信息系统安全技术
    一、信息安全的有关概念1.1信息安全属性秘密性:指信息不被未授权者知晓的属性完整性:信息是正确的、真实的、未被篡改的、完整无缺的属性可用性:信息能够随时正常使用的属性1.2信息系统安全的层次设备安全:设备的稳定性:不出故障的概率设备的可靠性:正常执行任务的概率设......
  • 前缀和求解(c++)
    数组ana1a2...an前缀和Si=a1+a2+...+ai①如何求②作用//一维数组前缀和的计算#include<iostream>usingnamespacestd;constintN=100010;inta[N],s[N];intn,m;intmain(){scanf("%d%d",&n,&m);for(inti=1;i<=n;......
  • UTF-8编码
    UTF-8是一种针对Unicode的可变长度字符编码。针对Unicode:UTF-8是Unicode的实现方式之一。相当于Unicode规定了字符对应的代码值,这个代码值需要转换为字节序列的形式,用于数据存储、传输。代码值到字节序列的转换工作由UTF-8来完成。可变长度字符编码:UTF-8使用一至四个字......
  • 常见的自动化测试相关框架
    Appium:一个开源、跨平台的自动化测试工具,用于测试原生和轻量移动应用,支持iOS、Android和FirefoxOS平台。Carina:一款Java自动测试框架,实现很完善、功能齐全,但文档较少,对于测试人员学习难度有要求。Galen:一个开放源码的测试网页布局和响应设计的开源工具。Gauge:一种相对较新的测试自......
  • pg数据库和Oracle语法哪里有差异
    PostgreSQL(简称为PG)和Oracle是两种不同的关系型数据库管理系统,它们在语法和特性方面存在一些差异。以下是一些常见的差异:数据类型:两者支持的数据类型有一些差异,例如PostgreSQL支持数组类型和范围类型,而Oracle不支持。字符串引号:在PostgreSQL中,可以使用单引号或双引号表示字......
  • python实现抓取表情网站图片
    1:效果图2:代码importosimportrequestsfrombs4importBeautifulSoupifnotos.path.exists('./images/'):os.mkdir('./images/')headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(K......
  • 无涯教程-SQL - FULL JOIN函数
    SQLFULLJOIN组合了左右外部联接的输出,联接的表将包含两个表中的所有记录,并为任一侧缺少的匹配项填充NULL。FULLJOIN-语法FULLJOIN的基本语法如下-SELECTtable1.column1,table2.column2...FROMtable1FULLJOINtable2ONtable1.common_field=table2.common_fie......
  • SQL中的unix_timestamp()函数
    unix_timestamp()是SQL中用于将日期和时间转换为UNIX时间戳的函数。UNIX时间戳是指从1970年1月1日(UTC)开始的秒数。使用场景:时间戳转换:当你有一个日期和时间,并希望将其转换为UNIX时间戳格式时。数据整合:在数据整合过程中,你可能需要将来自不同源的数据统一到相同的......
  • ​​<resultType>​​​ 和 ​​<resultMap>
    在MyBatis中,<resultType>和<resultMap>都是用于映射查询结果的元素,它们分别用于指定简单类型和复杂类型的映射关系。以下是它们的简要说明:1.<resultType><resultType>用于指定返回结果的简单类型,通常是基本数据类型或包装类。当查询的结果只有一个简单类型时,可以使用<resul......
  • C#微信公众号HIS预约挂号系统源码
    微信公众号预约挂号系统、支付宝小程序预约挂号系统主要是让自费、医保患者在手机上就能实现就医全过程,实时预约挂号、自费、医保结算,同时还可以查询检查检验报告等就诊信息,真正实现了让信息“多跑路”,让群众“少跑腿”。系统与HIS对接,通过医院微信公众号,患者用身份证注册以后,可以......