首页 > 其他分享 >Vue3学习汇总(路由篇)

Vue3学习汇总(路由篇)

时间:2024-09-09 12:51:57浏览次数:12  
标签:title route 汇总 Vue3 组件 router path 路由

1.单一页面设计常用

存在导航栏和内容区,导航栏路由分配,内容区呈现组件内容;

<template>
  <div class="app">
    <h2 class="title">vue路由测试</h2>
    <!--    导航区     -->
    <div class="navigate">
      <RouterLink to="/home" active-class="active">首页</RouterLink>
      <RouterLink to="/new" active-class="active">新闻</RouterLink>
      <RouterLink to="/about" active-class="active">关于</RouterLink>
    </div>
    <!--   展示区    -->
    <div class="main-content">

<!--  这里占位符  让路由组件放到此处    -->
      <Router-View ></Router-View>

    </div>
  </div>

</template>


<script lang="ts" setup >

import {RouterView, RouterLink} from "vue-router";


</script>


<style scoped>


.title {
  text-align: center;
  word-spacing: 5px;
  margin: 30px 0;
  height: 70px;
  line-height: 70px;
  background-image: linear-gradient(45deg, grey, white);
  border-radius: 10px;
  box-shadow: 0 0 2px;
  font-size: 30px;
}

.navigate {
  display: flex;
  justify-content: space-around;
  margin: 0 100px;

}

.navigate a {
  display: block;
  text-align: center;
  width: 90px;
  height: 40px;
  line-height: 40px;
  border-radius: 10px;
  background-color: grey;
  text-decoration: none;
  color: white;
  font-size: 18px;
  letter-spacing: 5px;

}

.navigate a.active {
  background-color: #64967E;
  color: #ffc268;
  font-weight: 900;
  text-shadow: 0 0 1px black;
  font-family: 微软雅黑;
}

.main-content {
  margin: 0 auto;
  margin-top: 30px;
  border-radius: 10px;
  width: 90%;
  height: 400px;
  border: 1px solid;
}

</style>

2.理解 route(路由)  和  router(路由器)

路由器是管理一堆路由,路由是一组 url 和 vue组件 的对应;

3.vue项目文件规范

3.1路由器位置

通常路由文件会写在 src—>router—>index.ts 文件内,引入路由和组件、创建路由器、暴露路由、在main.ts中配置一下;

// router 路由器   route 路由

//创建一个路由器,并暴露出去

//第一步 引入createRouter  路由组件
// createWebHashHistory  哈希模式   history模式
import {createRouter, createWebHistory} from "vue-router";
import route_home from '../components/route_home.vue'
import route_new from '../components/route_new.vue'
import route_about from '../components/route_about.vue'

//第二步  创建路由器
const router=createRouter({
     history: createWebHistory(), //路由器的工作模式
    routes:[
        // 路由需要指明 路径和组件的对应关系 第一对路由关系
        {
            path:'/home',
            component:route_home
        },
        // 第二对路由关系
        {
            path:'/new',
            component:route_new
        },
        // 第三对路由关系
        {
            path:'/about',
            component:route_about
        }
    ]
})

// 将路由器暴露出去
export default router

// 剩下的需要去main.ts添加

3.2路由组件位置

路由组件一般放在 src—>pages 或者 src—>views 文件夹下,例如上述的route_home、route_new、route_about放置在pages文件夹下;

组件分为:一般组件和路由组件,一般组件放在components里面,路由组件放在pages 或者 views下;

4.路由页面渲染原理

点击不同链接渲染出不同的内容区,实际上是将旧的组件卸载(onUnmounted),将新的组件挂载(onMounted)

5.路由器工作模式

history模式

const router=createRouter({
     history: createWebHistory(), //路由器的工作模式
    routes:[
        // 路由需要指明 路径和组件的对应关系 第一对路由关系
    ]
})

 优点:url不带#,美观;

缺点:项目上线,需要服务器端配合路径问题;

hash模式

const router=createRouter({

history: createWebHashHistory(), //路由器hash工作模式

routes:[ // 路由需要指明 路径和组件的对应关系 第一对路由关系 ] })

 优点:兼容性好,不需要服务器处理路径;

缺点:url带#,不美观;

6.路由 RouterLink组件中 to的两种写法

方法一:(字符串写法)

<div class="navigate">
  <RouterLink to="/home" active-class="active">首页</RouterLink>
  <RouterLink to="/new" active-class="active">新闻</RouterLink>
  <RouterLink to="/about" active-class="active">关于</RouterLink>
</div>

方法二:

(对象写法   path跳转 )

<div class="navigate">
  <RouterLink :to="{path:'/home'}" active-class="active">首页</RouterLink>
  <RouterLink :to="{path:'/new'}" active-class="active">新闻</RouterLink>
  <RouterLink :to="{path:'/about'}" active-class="active">关于</RouterLink>
</div>

(对象写法   name跳转 )

<div class="navigate">
  <RouterLink :to="{name:'xinwen'}" active-class="active">新闻</RouterLink>
</div>

7.路由命名

routes:[
    // 路由需要指明 路径和组件的对应关系 第一对路由关系
    {   
        name:'zhuye',
        path:'/home',
        component:route_home
    },
    // 第二对路由关系
    {
        name:'xinwen',
        path:'/new',
        component:route_new
    },
    // 第三对路由关系
    {
        name:'guanyu',
        path:'/about',
        component:route_about
    }
]

设置上路由命名以后,  第6小节将  路由 RouterLink组件中 to的两种写法  ,对象写法也可以写为

:to="{name:'zhuye'}"

8.嵌套路由 和 路由传参

8.1嵌套路由

{
    name: 'xinwen',
    path: '/new',
    component: route_new,
    children: [
        {   
            name: 'xaingqing',
            path: 'detail',
            component: new_detail,
        }
    ]
}

可以通过创建路由器里面,每个路由下存在参数children,实现路由嵌套

这里的新闻组件下又嵌套了一个 新闻列表的组件 ,通过传递参数,实现不同新闻内容的呈现;

8.2路由传参

query传参(方法1):

直接在需要传参的url后面写  “ ? ”  ,问号后面跟传递的key=value,多个参数之间通过“ & ”连接,使用 ` 反演号 在模板字符串里嵌入js,使用${};

<ul>
          <li v-for="item in newlist" :key="item.id">
            <RouterLink :to="`/new/detail?id=${item.id}&title=${item.title}&content=${item.content}`">{{ item.title }}</RouterLink>
          </li>
</ul>

组件调用传过来的参数:

import {useRoute} from "vue-router";

const route=useRoute()
console.log(route)

传过来的参数以键值对方式保存在 route['query'] 中,和route.query是等价的都可以用;

query传参(方法2):

<ul>
    <li v-for="item in newlist" :key="item.id">
        <RouterLink
                :to="{
                  path:'/new/detail',
                  query:{
                    id:item.id,
                    title:item.title,
                    content:item.content
                  }
                }"
            >
              {{item.title}}
        </RouterLink>
    </li>
</ul>

使用路由 path跳转 中,给to添加参数 query,这样直接将参数传递给子组件,组件接收时,也是通过上述方式接收;

param参数传参方法

在嵌套路由内需要指定传参的占位符:

// 第四对路由关系
{
    name: 'shiping',
    path: '/video',
    component: route_video,
    children: [
        {
            name: 'shiping_detail',
            path: 'video_detail/:id/:title/:content',  //params参数传参方法 占位
            component: video_detail,
        }
    ]
}

在组件内直接在routerlink中 to跳转的路由后面直接写 /需要传递参数的值 (方法一):

<ul>
  <li v-for="item in newlist" :key="item.id">
    <!--    params传参方式        -->
    <RouterLink :to="`/video/video_detail/${item.id}/${item.title}/${item.content}`">
      {{item.title}}
    </RouterLink>
  </li>
</ul>

routerlink中to用name跳转(方法二):

<RouterLink
                :to="{
                        name:'shiping_detail',
                        params:{
                          id:item.id,
                          title:item.title,
                          content:item.content
                        }
                }">
              {{ item.title }}
</RouterLink>

组件接收参数方式与query传参接收方法一样:

import {useRoute} from "vue-router";

const route = useRoute()
console.log(route.params)

(注意 参数占位,占位参数若是可传可不传,则在参数后加个? 即可     params参数传递时不能传递数组  )

9.路由的props配置

两种传参方式对应两种配置方法,都是在路由配置里面添加props:

query传参:

{
            name: 'xinwen',
            path: '/new',
            component: route_new,
            children: [
                {
                    path: 'detail',
                    component: new_detail,
                    //query参数写法:
                    props(route_info){
                        console.log(route_info)
                        return{
                            id:route_info['query']['id'],
                            title:route_info['query']['title'],
                            content:route_info['query']['content'],

                        }
                    }
                }
            ]
},

params传参:

{
            name: 'shiping',
            path: '/video',
            component: route_video,
            children: [
                {
                    name: 'shiping_detail',
                    path: 'video_detail/:id/:title/:content?',  //params参数传参方法 占位
                    component: video_detail,
                    // params参数写法: 将路由收到的所有params参数,作为props传给路由组件
                    props:true
                }
            ]
        }

在组件中接收参数:

defineProps(['id','title','content'])

10.路由的replac属性

在routerlink 组件上加上replace属性;

vue的两种历史记录:push和replace,默认为push模式,浏览器可以保留每次访问的记录进行前进后退,修改为replace模式后,只能保留当前界面,不能前进后退;

      <RouterLink replace :to="{path:'/home'}" active-class="active">首页</RouterLink>
      <RouterLink replace :to="{path:'/new'}" active-class="active">新闻</RouterLink>
      <RouterLink replace to="/video" active-class="active">视频</RouterLink>
      <RouterLink replace :to="{path:'/about'}" active-class="active">关于</RouterLink>

修改为replace模式后,不能后退和前进

11.编程式路由导航

routerlink实际上在页面展示的时候是a标签,但要想实现在脚本代码里面的路由跳转,则需要使用编程式路由导航,通过在脚本语言引入router(路由器),实现各个路由的自由切换:

在组件的script标签内引入router,使用router.push('/指定路由') 或者router.replace('/指定路由'),二者区别见10小结;

import {RouterView, RouterLink, useRouter} from "vue-router";
import {onMounted} from "vue";
let router=useRouter()


// 挂载一个3秒以后,跳转到新闻界面
onMounted(()=>{
  setTimeout(()=>{
    router.push('/new')
  },3000)
})

示例:

templa代码:

<!--    导航区     -->
      <div class="new_navigate">
        <ul>
          <li v-for="item in newlist" :key="item.id" class="li">
            <button @click="looknew(item)" class="but">查看新闻</button>
            <!-- query传参   第一种传参方式        -->
            <!--            <RouterLink :to="`/new/detail?id=${item.id}&title=${item.title}&content=${item.content}`">-->
            <!--              {{item.title}}-->
            <!--            </RouterLink>-->
            <!--  query传参  第二种传参方式        -->
            <RouterLink
                :to="{
                  path:'/new/detail',
                  query:{
                    id:item.id,
                    title:item.title,
                    content:item.content
                  }
                }"
            >
              {{ item.title }}
            </RouterLink>
          </li>
        </ul>
      </div>


script代码:
let router = useRouter()

interface itemInter{
  id:string,
  title:string,
  content:string
}

function looknew(item:itemInter) {
  router.push({
    path: '/new/detail',
    query: {
      id: item.id,
      title: item.title,
      content: item.content
    }
  })
}


 使用编程式路由导航时,router.push()  跳转链接的写法和  routerlink的to属性 完全一致,可以通过 字符串跳转  也可以通过 对象跳转 ;

12.路由重定向

vue项目启动后,从 http://localhost:5173/   跳转到  http://localhost:5173/home,在路由器里配置一下:

{
            path:'/',
            redirect:'/home'
}

标签:title,route,汇总,Vue3,组件,router,path,路由
From: https://blog.csdn.net/weixin_50845028/article/details/142029911

相关文章

  • 组态软件之万维组态介绍(web组态、html组态、vue2/vue3组态、组态软件、组态编辑器)
     一、什么是组态软件组态软件是一种用于创建、配置和管理监控和控制系统的软件工具。组态是指不需要编写计算机程序、通过配置的方式完成工业应用开发的系统。它们通常用于工业自动化领域,用于实时监视和控制工业过程。组态软件提供了丰富的功能和工具,使用户能够创建用户界......
  • Vue3:<Teleport>传送门组件的使用和注意事项
    你好,我是沐爸,欢迎点赞、收藏、评论和关注。Vue3引入了一个新的内置组件<Teleport>,它允许你将子组件树渲染到DOM中的另一个位置,而不是在父组件的模板中直接渲染。这对于需要跳出当前组件的DOM层级结构进行渲染的场景非常有用,比如模态框(Modal)、下拉菜单(Dropdown)或者工......
  • DAY20240908 VUE:一文带你了解Vue 中的嵌套路由
    VUE:嵌套路由一、嵌套路由目录新建文件夹:体现嵌套关系。Films.vue文件变化index.js文件变化二、嵌套路由和二级路由的关系三、参考一、嵌套路由何谓嵌套路由,参考如下:上面有一个大的轮播图,下面一个二级的声明式导航,可以切换二级选项卡,此时只有二级路径在变,轮播图保......
  • VUE框架基于Vite的Vue3搭建项目的脚手架------VUE框架
    data:redis:lettuce:cluster:refresh:adaptive:trueperiod:2000pool:max-idle:8min-idle:0max-wait:-1msmax-active:8password:abc123......
  • vue3知识总结
    Vue3是Vue.js的最新版本,相较于Vue2,它在性能、API设计、类型支持等多个方面都有显著的改进和创新。以下是对Vue3知识的总结:一、性能优化响应式系统升级:Vue3使用Proxy替代了Vue2中的Object.defineProperty,实现了对对象变化的更广泛监测,包括对象的添加和删除,......
  • 【个人向】常用日文网站汇总
    電子辞書weblioweblio「収録辞書500以上。国内最大級のオンライン辞書」官方、权威的电子词典,日本最大的在线辞书。国内的moji辞書上大部分的单词释义都是直接从这上面照搬的(而且还搬不完整,笑)。缺点是查不到某些网络流行语,而且网页排版很古老。以单词「創作」为例コトバンク......
  • AI大语言模型LLM学习-基于Vue3的AI问答页面
    系列文章1.AI大语言模型LLM学习-入门篇2.AI大语言模型LLM学习-Token及流式响应3.AI大语言模型LLM学习-WebAPI搭建前言在上一篇博文中,我们使用Flask这一Web框架结合LLM模型实现了后端流式WebAPI接口,本篇将基于Vue3实现AI问答页面,本人习惯使用HBuilder进行前端页面......
  • Vue 多个服务的路由配置 在 vue.config.js 里面怎么写
    在Vue项目的vue.config.js文件中,你不能直接配置路由服务,因为这个文件主要用于配置Webpack和开发服务器等项目设置。路由配置通常是在Vue项目的代码中设置的,例如在router/index.js文件中。不过,如果你需要配置多个服务(即不同的API服务或代理服务),你可以在vue.config.js......
  • 园区网的路由设计
    一、需求分析    旭日创新公司共拥有三个分部,其中一个为总部,另外两个分别为分公司1和分公司2,总部和分公司均通过路由器S连接到ISP的核心路由器Router_ISP。总部包含四个部门(产品设计部、维护测试部、销售部、财务部)分别有计算机200、100、60和50台,分公司1包含两个部门(......
  • C++常见异常汇总(二): undefined reference to
    文章目录1、undefinedreferencetoA2、undefinedreferenceto`vtable2.1模版函数定义方案1:定义与实现均一起定义在头文件中2.2模版函数定义方案2:定义的同一个文件中,显示声明具体类型3、multipledefinitionof1、undefinedreferencetoA检查所有main相......