vue3路由详解,从0开始手动配置路由(vite,vue-router)

news2024/11/18 9:43:29

 创建一个不含路由的vue项目

(查看路由配置可以直接跳过这一段)

输入npm指令,然后写一个项目名称,之后一路回车即可

npm create vue@latest

注意这里我们不选引入vue router,成功后可以 查看目录

然后按提示信息输入指令,进入项目,安装node包,并启动项目

  cd myRouter
  npm install
  npm run dev

最后创建完成的目录 

成功启动了一个vue项目,接下面我们开始配置路由

配置路由

首先我们在src目录下新建两个文件夹,router和view

然后分别在这两个目录下创建几个新文件

安装vue-router包

npm install vue-router --save

安装完成后可以在package.json中查看

成功安装后我们再配置views下的home.vue,about.vuerouter下的index.js

home.vue: 

<script setup>//组合式API
import { ref,reactive,onMounted } from 'vue';

</script>

<template>
<p>home</p>
</template>

<style scoped>
/* 当 <style> 标签带有 scoped attribute 的时候,它的 CSS 只会影响当前组件的元素 */

</style>

about.vue: 

<script setup>//组合式API
import { ref,reactive,onMounted } from 'vue';

</script>

<template>
<p>about</p>
</template>

<style scoped>
/* 当 <style> 标签带有 scoped attribute 的时候,它的 CSS 只会影响当前组件的元素 */

</style>

 index.js:

import { createRouter,createWebHashHistory } from "vue-router";
import home from "../views/home.vue";

const routes = [
    {
        path:"/", //路径描述
        name:"home",
        component: home // 主动引用,无论是否访问均加载页面
    },
    {
        path:"/about",
        name:"about",
        component: ()=> import("../views/about.vue")// 异步加载的路由的组件位置,只有页面被访问才加载
    }
]

const router = createRouter({
    history:createWebHashHistory(), // 跳转方式
    routes :routes // 路由配置
})
export default router

        这要注意index.js中的 routes,这里是配置了页面的跳转路径和路径,同时设置了页面的加载方式,component异步的加载方式可以优化主页面的加载通常我们选择主页直接加载页面,而其他页面选择异步加载),而跳转方式我们尽量使用createWebHashHistory()方法

配置好路由页面和路由后,我们将它从入口文件(main.js,app.vue)导入进项目,

main.js:

import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index';

createApp(App).use(router).mount('#app');

app.vue:

<script setup>
import {RouterLink,RouterView} from "vue-router"
</script>

<template>
  <header>
    <img alt="Vue logo" class="logo" src="./assets/logo.svg" width="125" height="125" />
  </header>

  <main>
    <router-link to="/">home</router-link>
    <router-link to="/about">about</router-link>
    <router-view></router-view>
  </main>
</template>

<style scoped>
header {
  line-height: 1.5;
}

.logo {
  display: block;
  margin: 0 auto 2rem;
}

@media (min-width: 1024px) {
  header {
    display: flex;
    place-items: center;
    padding-right: calc(var(--section-gap) / 2);
  }

  .logo {
    margin: 0 2rem 0 0;
  }

  header .wrapper {
    display: flex;
    place-items: flex-start;
    flex-wrap: wrap;
  }
}
</style>

 在app.vue中router-link的作用是导航跳转,通过to属性跳转页面,to的值为index.js中的routes的path跳转路径,router-view的作用是展示页面,跳转的页面在这个标签内展示

可以看到实现了基本的单页面跳转

路由传参

        页面直接跳转还可以传递参数,在实际应用中,我们可以通过不同的参数在同一个网页展示不同的信息

我们下view下新建两个文件 news.vue , newData.vue

news.vue:

<script setup>//组合式API
import { ref,reactive,onMounted } from 'vue';

</script>

<template>
<p>news</p>
<ul>
    <li><router-link to="/newData/新闻1">new1</router-link></li>
    <li><router-link to="/newData/新闻2">new2</router-link></li>
    <li><router-link to="/newData/新闻3">new3</router-link></li>
</ul>
</template>

<style scoped>
/* 当 <style> 标签带有 scoped attribute 的时候,它的 CSS 只会影响当前组件的元素 */

</style>

newData.vue: 

<script setup>//组合式API
import { ref,reactive,onMounted } from 'vue';

</script>

<template>
<p>这里展示的是{{ $route.params.key }}</p>
</template>

<style scoped>
/* 当 <style> 标签带有 scoped attribute 的时候,它的 CSS 只会影响当前组件的元素 */

</style>

然后再配置index.js:

import { createRouter,createWebHashHistory} from 'vue-router'
import home from '../views/home.vue'
const routes = [
    {
        path:'/',
        name:'home',
        component: home
    },
    {
        path:'/about',
        name:'about',
        component: ()=> import('../views/about.vue')
    },
    {
        path:'/news',
        name:'news',//路由的名称
        component: ()=> import('../views/news.vue')
    },
    {
        path:"/newData/:key",
        name:"newData",
        component: ()=> import('../views/newData.vue')
    }
]
const router = createRouter({
    history:createWebHashHistory(),
    routes:routes
})
export default router;

这里要注意 news.vue中的跳转标签属性to除了指向newData.vue之外,还带有一个参数,这个参数在index.js中用:key来表示,在newData.vue中通过$route.params.key获取(这里的key就是:key,可以自行定义)

这样我们就成功实现了页面跳转时传递参数

嵌套路由

        除了传递参数能向下访问页面,还有另一种方式也可以向下访问页面,也就是二级导航(会保留导航)

        我们在view文件夹下新建一个文件夹aboutViews,并在aboutViews文件夹下新建aboutA.vue和aboutB.vue

aboutA.vue:

<script setup>//组合式API
import { ref,reactive,onMounted } from 'vue';

</script>

<template>
<p>关于信息A</p>
</template>

<style scoped>
/* 当 <style> 标签带有 scoped attribute 的时候,它的 CSS 只会影响当前组件的元素 */

</style>

aboutB.vue:

<script setup>//组合式API
import { ref,reactive,onMounted } from 'vue';

</script>

<template>
<p>关于信息B</p>
</template>

<style scoped>
/* 当 <style> 标签带有 scoped attribute 的时候,它的 CSS 只会影响当前组件的元素 */

</style>

然后再修改about.vue和index.js

about.vue:

<script setup>//组合式API
import { ref,reactive,onMounted } from 'vue';

</script>

<template>
    <div>
        <router-link to="/about/A">A</router-link>
        <router-link to="/about/B">B</router-link>
        <router-view></router-view>
    </div>

</template>

<style scoped>
/* 当 <style> 标签带有 scoped attribute 的时候,它的 CSS 只会影响当前组件的元素 */

</style>

index.js:

import { createRouter,createWebHashHistory} from 'vue-router'
import home from '../views/home.vue'
const routes = [
    {
        path:'/',
        name:'home',
        component: home
    },
    {
        path:'/about',
        name:'about',
        component: ()=> import('../views/about.vue'),
        children:[
            {
                path: "A" ,//注意这里不加'/'
                component: ()=> import("../views/aboutViews/aboutA.vue"),
            },
            {
                path:'B',
                component: ()=> import('../views/aboutViews/aboutB.vue')
            }
        ]
    },
    {
        path:'/news',
        name:'news',//路由的名称
        component: ()=> import('../views/news.vue')
    },
    {
        path:"/newData/:key",
        name:"newData",
        component: ()=> import('../views/newData.vue')
    }
]
const router = createRouter({
    history:createWebHashHistory(),
    routes:routes
})
export default router;

        在about.vue中添加router-link和router-view标签,并加上2级路径,然后在index.js的about的路由属性中添加children属性,在children属性绑定对应的2级路由

这里就成功实现了2级路由

到这里我们就成功的手动搭建路由,并实现了多种路由的方式

系统路由

完成了手动路由,我们可以参照对比一下系统路由的结构

重新新建一个项目

npm create vue@latest

这里我们选择引入vue Router构建项目,其他的不变选择默认即可

我们进入目录可以看到在src下已经有router和views文件夹以及对应的文件,

package.json文件中也有vue-router包

启动项目查看

通过这个路由的url可以知道,系统路由默认是采用的createWebHistory()方法进行跳转

        其他的基本格式都没有区别,了解了手动搭建路由后,在新项目中配置路由就可以使用系统路由并在此基础上进行一定的修改,这样可以很大程度的提高开发效率

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

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

相关文章

如何设置vue3项目中默认的背景为白色

方法1&#xff1a;通过CSS全局样式 在全局CSS文件中设置&#xff1a; 如果你的项目中有全局的CSS文件&#xff08;如App.vue或专门的CSS文件&#xff09;&#xff0c;你可以直接设置body或html标签的背景颜色。 在src/assets文件夹中&#xff08;或者任何你存放CSS文件的地方&a…

【机器学习基础】Python编程06:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

Linux网络-自定义协议、序列化和反序列化、网络计算服务器的实现和Windows端客户端

文章目录 前言一、自定义协议传结构体对象 序列化和反序列化什么是序列化&#xff1f;反序列化 二、计算器服务端&#xff08;线程池版本&#xff09;1.main.cc2.Socket.hpp3.protocol.hpp4.Calculator.hpp5.serverCal.hpp6.threadPool.hpp7.Task.hpp8. log.hpp 客户端Windows客…

【回溯算法】N皇后问题·构建多叉决策树,遍历决策节点,做出决策(边),收集答案

0、前言 在由树形解空间入手&#xff0c;深入分析回溯、动态规划、分治算法的共同点和不同点这篇博客&#xff0c;其实已经对回溯算法的思想、做题框架做出了详细的阐述。这篇文章我们再从N皇后问题&#xff0c;加深我们对其理解。 这里在简单再次对其进行概述&#xff1a; …

3、前端本地环境搭建

前端本地环境搭建 安装node [node下载地址] https://nodejs.org/en/download/prebuilt-installer 选择LTS的版本进行下载 下载后直接双击点击&#xff0c;选择自己想要安装到的目录一直点下一步即可&#xff08;建议不要安装到c盘&#xff09; 安装完成后配置环境变量&am…

NLP课程笔记-基于transformers的自然语言处理入门

NLP课程笔记-基于transformers的自然语言处理入门 项目地址2.1 图解attention2.1.1 Seq2seq框架2.1.2 Seq2seq细节2.1.3 Attention1) 基于RNN的seq2seq模型的问题2)基于Attention seq2seq方案 2.2 图解transformer2.2.1 transformer宏观结构单层编码器单层解码器 2.2.2 transfo…

揭秘FL Studio21.2最新官方免费下载中文破解版!

在音乐创作中&#xff0c;一个优秀的宿主软件是必不可少的。而FL Studio 21.2中文破解汉化免费版&#xff0c;作为一款功能强大、易于上手的宿主软件&#xff0c;已经成为越来越多音乐制作者的首选。那么&#xff0c;它究竟有何魅力呢&#xff1f;下面就让我们一起来了解一下。…

.Net Core 8.0 IIS部署遇到奇怪的部分接口报404的问题解决

本地运行没问题&#xff0c;部署到IIS后&#xff0c;部分接口报404&#xff0c;其它接口都正常。 经和群里讨论&#xff0c;大概意思是接口返回数据比较大的时候&#xff0c;就会出现这个问题。 查看事件查看器&#xff0c;发现应该是数据过大时使用了临时文件夹&#xff0c;…

CondaSSLError: OpenSSL appears to be unavailable on this machine.

conda create -n x1 python3.7报错 PS C:\Users\Richardo.M.Song\Desktop\lele_seg\x1> conda create -n x1 python3.7 Collecting package metadata (current_repodata.json): failed CondaSSLError: OpenSSL appears to be unavailable on this machine. OpenSSL is requ…

【TB作品】MSP430G2553单片机,MSP430 单片机读取 SHT30 传感器并显示数据

使用 MSP430 单片机读取 SHT30 传感器并显示数据 作品功能 本文介绍了如何使用 MSP430 单片机读取 SHT30 温湿度传感器的数据&#xff0c;并通过 OLED 屏幕显示实时的温度和湿度信息。通过此项目&#xff0c;您将学习如何配置 MSP430 的 I2C 接口、读取 SHT30 传感器的数据以…

求助!什么软件可以人声分离?手机上可以进行人声分离操作吗?

在数字时代&#xff0c;音频处理变得越来越重要&#xff0c;而人声分离技术则是其中的一项关键技术。很多人可能都有过这样的疑问&#xff1a;什么软件可以实现人声分离&#xff1f;手机上能否进行人声分离操作&#xff1f;今天&#xff0c;我们就来为大家解答这些问题&#xf…

封装组件库仿elementui<1>

目录 type属性 引入字体图标 button的点击事件 disabled属性 methods:{//点击事件是外部注册的handleClick(e){this.$emit(click,e)//通知父组件点击了&#xff0c;点了按钮&#xff0c;触发外界的click&#xff1f;传参为事件对象//向父组件派发了click事件} }, type属性…

揭露:抖音外卖区域代理骗局真相,绝不可错过!

自2023年11月23日抖音发布清退服务商的公告后&#xff0c;由官方认证的抖音外卖平台全国代理正式成为历史&#xff0c;而后&#xff0c;抖音外卖平台区域代理接棒&#xff0c;帮助抖音开拓本地生活市场。在此背景下&#xff0c;抖音外卖平台区域代理的申请人数与日俱增&#xf…

Frida 学习之 messages

目录 一、消息发送 二、环境准备 三、从目标进程中发消息 四、在目标进程中接收消息 五、在目标进程中以阻塞方式接收消息 官方链接&#xff1a;Messages | Frida • A world-class dynamic instrumentation toolkit 参考链接&#xff1a;Frida官方手册 - 消息发送_frida…

【Mac】Keyboard Maestro for Mac(键盘大师)软件介绍及安装教程

软件介绍 Keyboard Maestro for mac&#xff08;键盘大师&#xff09;是目前Mac OS平台上功能最为齐全的Mac键盘增强工具&#xff0c;它能将你的Keyboard作用发挥到极致&#xff0c;可以根据命令或计划自动执行简单或复杂的应用程序或网站&#xff0c;文本或图像。使用Keyboar…

mysql 8 linux7,8安装教程

选择自己对应的linux版本 cat /etc/os-release //查看自己linux系统版本 1.mysql下载地址 MySQL :: Download MySQL Community Server (Archived Versions) 拉到下面找到 选择自己linux指定的版本&#xff0c;否则会很麻烦 cat /etc/os-release //查看系统版本 2.查…

matlab模拟太阳耀斑喷发

代码 function simulate_solar_flare% 参数设置gridSize 100; % 网格大小timeSteps 200; % 时间步数dt 0.1; % 时间步长% 初始化网格[X, Y] meshgrid(linspace(-5, 5, gridSize));Z zeros(size(X));% 设置耀斑初始位置和强度flareCenter [0, 0]; % 耀斑中心位置flareRad…

docker基础,docker安装mysql,docker安装Nginx,docker安装mq,docker基础命令

核心功能操作镜像 Docker安装mysql docker run -d --name mysql -p 3306:3306 -e TZAsia/Shanghai -e MYSQL_ROOT_PASSWORDlcl15604007179 mysql docker的基本操作 docker rm 容器名称即可 docker ps 查看当前运行的容器 docker rm 干掉当前容器 docker logs 查看容器命令日…

【MySQL | 第十二篇】重新认识MySQL数据类型

12.理解MySQL数据类型 12.1整数类型 整数类型有五种&#xff1a;tinyint、smallint、mediumint、int、bigint&#xff08;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;8字节&#xff09;&#xff0c;存储范围为 -2^(N-1) 到 2^(N-1)-1所有整数类型默认有符号数&…

【红黑树变色+旋转】

文章目录 一. 红黑树规则二. 情况一叔叔存在且为红情况二.变色旋旋 一. 红黑树规则 对于红黑树&#xff0c;进行变色旋转处理&#xff0c;终究都是为了维持颜色以下几条规则&#xff0c;只有颜色和规则维持住了&#xff0c;红黑树就维持住了最长路径的长度不超过最短路径的两倍…