【Vue3中Router使用】

Vue3中Router使用

  • 1. 安装`vue-router`组件
  • 2. 建两个测试页面
    • 2.1 测试页面`Home.vue`
    • 2.2 测试页面`Category.vue`
  • 3. 创建路由对象
  • 4. 在入口`main.js`中引入`router`
  • 把`App.vue`改成路由页面
  • 5. 测试
    • 5.1 关闭检查解决`ESlint`报错
    • 5.2 改文件名解决`ESlint`检查报错
    • 测试`WebHashHistory` 和`WebHistory`的区别
  • 6. 管理系统的路由尝试
    • 6.1 修改`App.vue`
    • 6.2 创建`Portal.vue`
    • 6.3 创建`Main.vue`
    • 6.4 建登录界面
    • 6.4.1 安装`less`的模块
    • 6.4.2 安装`ElementPlus`的图标
    • 6.4.3 登录页面效果
    • 6.5 修改路由
    • 6.6 测试效果
    • 6.7 遗留问题.

这里的内容是基于前面搭建的环境进行的,自我摸索过程有不对的地方请希望不怜赐教。

1. 安装vue-router组件

Vue3对应的router组件是vue-router,所以执行下面的命令进行安装router组件。

npm install vue-route

2. 建两个测试页面

src目录下创建一个views目录,在目录先建两个页面,用于路由测试。

2.1 测试页面Home.vue

<template><div>This is Home Page....</div>
</template>
<script>export default {// name:"Home"}
</script>
<style scoped>
</style>

2.2 测试页面Category.vue

<template><div>This is Category....</div>
</template>
<script>export default {}
</script>
<style scoped>
</style>

3. 创建路由对象

src目录下创建router文件夹,并在其中创建一个index.js文件, 整体来说就是创建文件src\router\index.js。在文件中编辑内容如下:

import { createRouter, createWebHashHistory } from "vue-router";
import Home from '@/views/Home.vue'
import Category from '@/views/Category.vue'
const routes = [{ path: '/', redirect: '/home' },{ path: '/home', component: Home },{ path: '/category', component: Category },
]const router = createRouter({history: createWebHashHistory(),routes, // short for `routes: routes`
})export default router

createWebHashHistory(),这个应该是采用hash路由的方式,也就是url地址通过#符号进行路由定位。与之对应的是createWebHistory()方法,路由就是一个纯纯的URL地址。后续我们再测试一下。

4. 在入口main.js中引入router

首先是引入router对象

import router from '@/router'

再次需要应用router对象,使用use方法

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

上面一段相对之前增加了use(router)部分。改变之后的main.js如下.

import { createApp } from 'vue'
import App from './App.vue'
import 'element-plus/dist/index.css'
import router from '@/router'
createApp(App).use(router).mount('#app')

PS: 引入router的时候千万不能加中括号写成了import {router} from '@/router'

App.vue改成路由页面

<template><div><div>app</div><router-link to="/home">首页</router-link><router-link to="/category">关于</router-link><router-view></router-view></div>
</template>
<script>
</script>
<style>
</style>

5. 测试

做完上述的一切,其实已经可以对路由功能进行测试了。但是很遗憾,启动的时候报错了,是Eslint代码规范检查报错了,启动不了。报错信息如下.
ESlient报错
报错的核心内容应该是 Component name "Category" should always be multi-word vue/multi-word-component-names。猜测应该就是说我这文件名不规范吧, 要求多个单词做文件名。根据经验来说要么就是遵守规范把文件名改了,要么就是把检查给关了。哪就两种都试试把。

5.1 关闭检查解决ESlint报错

首先在工程根目录下创建.eslintrc.json。文件中的配置内容如下:

{"env": {"browser": true,"es2021": true,"node": true},"extends": ["plugin:vue/vue3-essential"],"plugins": ["vue"],"rules": {"import/no-unresolved": "off","import/extensions": "off","import/no-absolute-path": "off","import/no-extraneous-dependencies": "off","vue/no-multiple-template-root": "off","vue/multi-word-component-names": "off","no-param-reassign": ["error",{"props": true,"ignorePropertyModificationsFor": ["state","config"]}]},"settings": {}
}

把文件名的检测规则关掉"vue/multi-word-component-names": "off",.然后就可以启动了.启动之后的控制台信息:
启动控制台
然后访问http://localhost:8080/,因为路由种配置了默认的路由重定向到/home,所以页面会重定向到http://localhost:8080/#/home.得到的测试界面为:
界面
关于首页 是两个超链接,点击可以切换到不同的路由.

5.2 改文件名解决ESlint检查报错

为了验证vue/multi-word-component-names校验报错的问题。为了测试,我们讲该项改为error.

 "vue/multi-word-component-names": "error"

改完之后,再重新运行

npm run serve

错误再次出现.
在这里插入图片描述
接下来我们按照要求吧Home.vue 改成TestHome.vue, Category.vue 改成TestCategory.vue。同时,注意需要将router/index.js的引用部分也改一下。
改后的内容:
在这里插入图片描述

测试WebHashHistoryWebHistory的区别

首先以上的测试使用是是WebHashHistory的方式,所以所以看出路由的方式是#加上路由的地址。 这里再使用下WebHistory的方式,那吧router/index.js中的history换为createWebHistory()router/index.js内容如下:

import { createRouter, createWebHistory } from "vue-router";
import Home from '@/views/TestHome.vue'
import Category from '@/views/TestCategory.vue'
const routes = [{ path: '/', redirect: '/home' },{ path: '/home', component: Home },{ path: '/category', component: Category },
]const router = createRouter({history: createWebHistory(),routes, // short for `routes: routes`
})export default router

改完之后再访问http://locahost:8080,自动跳转到/home的路由,URL地址变为:http://localhost:8080/category。从形式上看就这个差异了。

6. 管理系统的路由尝试

首先管理系统的结构都是,进系统一个登录界面,然后跳转到一个主页面,左边导航,中间主区域就是变化的主要内容。根据这些需求,首先在App.vue这个入口中,应该保留一个router-view标签就OK了。主要用于展示两个路由一个是登录的,另外一个就是主界面。主界面中间区域搞个router-view。最后的造型应该就是如下所示:
router-规划布局

6.1 修改App.vue

<template><div><router-view></router-view></div>
</template>
<script>
</script>
<style>
</style>

6.2 创建Portal.vue

protal页面就是一个测试页面,内容如下

<template><div>Portal............</div>
</template><script>
export default {};
</script><style>
</style>

6.3 创建Main.vue

<template><div><el-container><el-header>Header</el-header><el-container><el-aside width="200px"><el-menudefault-active="2"class="el-menu-vertical-demo"@open="handleOpen"@close="handleClose":router="true"><el-sub-menu index="1"><template #title><el-icon><location /></el-icon><span>Navigator One</span></template><el-menu-item-group title="Group One"><el-menu-item index="1-1" route="/portal">Portal</el-menu-item><el-menu-item index="1-2">item two</el-menu-item></el-menu-item-group><el-menu-item-group title="Group Two"><el-menu-item index="1-3">item three</el-menu-item></el-menu-item-group><el-sub-menu index="1-4"><template #title>item four</template><el-menu-item index="1-4-1">item one</el-menu-item></el-sub-menu></el-sub-menu><el-menu-item index="2"><el-icon><icon-menu /></el-icon><span>Navigator Two</span></el-menu-item><el-menu-item index="3" disabled><el-icon><document /></el-icon><span>Navigator Three</span></el-menu-item><el-menu-item index="4"><el-icon><setting /></el-icon><span>Navigator Four</span></el-menu-item></el-menu></el-aside><el-main><router-view></router-view></el-main></el-container></el-container></div>
</template>
<script>
export default {};
</script>
<style scoped>
</style>

中间<el-main>里面route-view是主页填充内容区的路由区域。这里面用了el-menu,el-menu也可以直接用导航,但是需要打开导航所以加属性:router="true",然后挑选了一个item来导航到Protal.
<el-menu-item index="1-1" route="/portal">Portal</el-menu-item>

6.4 建登录界面

创建Login.vue

<template><div class="login"><div class="login_form"><p>后台管理系统</p><el-form :model="loginForm" ref="loginForm"><el-form-item label="" prop="account"><el-inputtype="text"autocomplete="off"v-model="loginForm.account"prefix-icon="UserFilled"placeholder="请输入用户名"size="large"></el-input></el-form-item><el-form-item label="" prop="password"><el-inputtype="password"autocomplete="off"v-model="loginForm.password"prefix-icon="Lock"placeholder="请输入密码"size="large"></el-input></el-form-item><el-form-item class="btns"><el-button type="primary" @click="onSubmit">登录</el-button><el-button>重置</el-button></el-form-item></el-form></div></div>
</template>
<script setup>
import { reactive, ref } from "vue";
import { useRouter } from "vue-router";
const loginForm = reactive({account: "",password: "",
});
const router = useRouter();
function onSubmit() {router.push("/main");
}
</script>
<style scoped lang="less">
.login {width: 100%;height: 100vh;background-image: url("../assets/login/background.jpeg");background-size: 100% 100%;background-position: center center;overflow: auto;position: relative;.login_form {width: 400px;height: 360px;position: absolute;left: 78%;top: 50%;margin-left: -200px;margin-top: -150px;padding: 10px;background: #fff;border-radius: 10px;box-shadow: 0 0 10px #ddd;.btns {display: flex;justify-content: flex-end;}}p {font-size: 24px;text-align: center;font-weight: 600;}
}
</style>

这里用到了vue-router组件,在点击登录按钮的时候,直接通过router跳转到/main页面。这里要导入一下依赖

import { useRouter } from "vue-router";

6.4.1 安装less的模块

因为这里的样式我用的是less,所以要安装Less的两个工具包

  1. 安装less-loader
npm install less-loader
  1. 安装less
npm install less

6.4.2 安装ElementPlus的图标

这里直接就参照一下ElementPlus官网的的做法就好了。

6.4.3 登录页面效果

登录页面的效果

6.5 修改路由

src/router/index.js的内容修改为:

import { createRouter, createWebHistory } from "vue-router";
const routes = [{ path: '', redirect: '/login' },{ path: '/login', component: () => import('@/views/Login.vue') },{path: '/main',component: () => import('@/views/Main.vue'),children: [{ path: '/portal', component: () => import('@/views/Portal.vue') },]}
]
const router = createRouter({history: createWebHistory(),routes, // short for `routes: routes`
})
export default router

6.6 测试效果

  1. 输入URL地址 http://localhost:8080/,自动跳转到登录页面
  2. 点击登录按钮自动跳转到主页面.
  3. 点击左侧导航的Portal页面就直接在中间主要区域打开Portal测试。
    点击Portal跳转到portal页面

6.7 遗留问题.

  1. 登录页面的输入框不能输入。

问题原因是因为 <el-form :model="loginForm" ref="loginForm"> 这里的这个 ref="loginForm"这个应用会导致下面的input框不能输入。

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

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

相关文章

python拆分Excel文件

按Sheet拆分Excel 或 按照某一列的不同值拆分Excel。文档样式如下&#xff1a; 结果&#xff1a;红色是按照Sheet名拆出的&#xff0c;蓝色和橙色是某个Sheet按照某列的不同值拆分的。 代码&#xff1a; # -*- coding: utf-8 -*- """ 拆分excel文件——按照…

交易所 Level-2 历史行情数据自动化导入攻略

用户部署完 DolphinDB 后&#xff0c;需要将历史股票数据批量导入数据库&#xff0c;再进行数据查询、计算和分析等操作。DolphinDB 开发了 ExchData 模块&#xff0c;主要用于沪深交易所 Level-2 行情原始数据的自动化导入&#xff0c;目前已支持的数据源包括&#xff1a; 沪…

开源ISP介绍(2)————嵌入式Vitis搭建

Vivado搭建参考前一节Vivado基于IP核的视频处理框架搭建&#xff1a; 开源ISP介绍&#xff08;1&#xff09;——开源ISP的Vivado框架搭建-CSDN博客 导出Hardware 在vivado中导出Hardware文件&#xff0c;成功综合—实现—生成比特流后导出硬件.xsa文件。&#xff08;注意导…

109.【C语言】数据结构之二叉树层序遍历

目录 1.知识回顾 2.代码实现 准备工作 LevelOrder函数 代码框架 关键代码 3.执行结果 1.知识回顾 层序遍历参见106.【C语言】数据结构之二叉树的三种递归遍历方式文章 截取的部分内容 定义:按层的方式遍历(,设n为树的深度,h1-->h2-->h3-->...-->hn) 以下面…

安装部署PowerDNS--实现内网DNS解析

PDNS是PowerDNS的缩写&#xff0c;是一个开源的DNS服务器软件。PowerDNS具有高性能、灵活性和可扩展性&#xff0c;可用于搭建各种规模的DNS解析服务。它支持多种后端数据库&#xff08;如MySQL、PostgreSQL等&#xff09;&#xff0c;提供高度定制化的配置选项&#xff0c;并具…

13.在 Vue 3 中使用OpenLayers加载鹰眼控件示例教程

在 WebGIS 开发中&#xff0c;鹰眼控件 是一个常用的功能&#xff0c;它可以为用户提供当前地图位置的概览&#xff0c;帮助更好地定位和导航。在本文中&#xff0c;我们将基于 Vue 3 的 Composition API 和 OpenLayers&#xff0c;创建一个简单的鹰眼控件示例。 效果预览 在最…

Elasticsearch 单节点安全配置与用户认证

Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞&#xff1a;Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时&#xff0c;需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤&#xff0c;为单节…

使用C#基于ADO.NET编写MySQL的程序

MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本&#xff1a;MySQL 服务器系统和 MySQL 嵌入…

计算机视觉与各个学科融合:探索新方向

目录 引言计算机视觉与其他学科的结合 与医学的结合与机械工程的结合与土木工程的结合与艺术与人文的结合发文的好处博雅知航的辅导服务 引言 计算机视觉作为人工智能领域的重要分支&#xff0c;正迅速发展并渗透到多个学科。通过与其他领域的结合&#xff0c;计算机视觉不仅…

SpringBoot期末知识点大全

一、学什么 IoC AOP&#xff1a;面向切面编程。 事物处理 整合MyBatis Spring框架思想&#xff01; 二、核心概念 问题&#xff1a;类之间互相调用/实现&#xff0c;导致代码耦合度高。 解决&#xff1a;使用对象时&#xff0c;程序中不主动new对象&#xff0c;转换为由外部提…

QT模型/视图:自定义代理类型

简介 在模型/视图结构中&#xff0c;代理的作用就是在视图组件进入编辑状态编辑某个项时&#xff0c;提供一个临时的编辑器用于数据编辑&#xff0c;编辑完成后再把数据提交给数据模型。例如&#xff0c;在 QTableView 组件上双击一个单元格时&#xff0c;代理会提供一个临时的…

ubuntu中使用ffmpeg库进行api调用开发

一般情况下&#xff0c;熟悉了ffmpeg的命令行操作&#xff0c;把他当成一个工具来进行编解码啥的问题不大&#xff0c;不过如果要把功能集成进自己的软件中&#xff0c;还是要调用ffmpeg的api才行。 ffmpeg的源码和外带的模块有点太多了&#xff0c;直接用官网别人编译好的库就…

实现 DataGridView 下拉列表功能(C# WinForms)

本文介绍如何在 WinForms 中使用 DataGridViewComboBoxColumn 实现下拉列表功能&#xff0c;并通过事件响应来处理用户的选择。以下是实现步骤和示例代码。 1. 效果展示 该程序的主要功能是展示如何在 DataGridView 中插入下拉列表&#xff0c;并在选择某一项时触发事件。 2.…

Docker Compose实战一( 轻松部署 Nginx)

通过过前面的文章&#xff08;Docker Compose基础语法&#xff09;你已经掌握基本语法和常用指令认识到Docker Compose作为一款强大工具的重要性&#xff0c;它极大地简化了多容器Docker应用程序的部署与管理流程。本文将详细介绍如何使用 Docker Compose 部署 Nginx&#xff0…

【免费】如何考取HarmonyOS应用开发者基础认证和高级认证(详细教程)

HarmonyOS应用开发者认证考试PC网址 基础&#xff1a;华为开发者学堂 高级&#xff1a;华为开发者学堂 注&#xff1a;免费认证&#xff0c;其中基础认证有免费的课程&#xff0c;浏览器用Edge。 (新题库有点懒&#xff0c;不更新了&#xff0c;点赞收藏后找我要新题库 2024…

瑞芯微开发板 烧写固件问题

自用rk3568-firefly-itx-3568q核心板fpga自研底板&#xff0c;因底板所需外设、功能与原厂有较大差异&#xff0c;故裁剪相应sdk&#xff0c;编译新的内核进行烧写。然而在更改设备树过程中kernel/drivers/media/i2c/fpga.c中的像素格式MEDIA_BUS_FMT_YUYV8_2X8误改成MEDIA_BUS…

photoblog解题过程

本题要求&#xff1a;通过sql注入&#xff0c;找到数据库中的账号密码&#xff0c;并成功登录。登录后利用文件上传&#xff0c;将一句话木马上传到数据库中&#xff0c;然后并对网站进行控制。 解题过程 1、通过在靶机中输入ifconfig&#xff0c;查到ip为192.168.80.153&…

QT获取tableview选中的行和列的值

查询数据库数据放入tableview&#xff08;tableView_database&#xff09;后 QSqlQueryModel* sql_model new QSqlQueryModel(this);sql_model->setQuery("select * from dxxxb_move_lot_tab");sql_model->setHeaderData(0, Qt::Horizontal, tr("id&quo…

「Mac玩转仓颉内测版46」小学奥数篇9 - 基础概率计算

本篇将通过 Python 和 Cangjie 双语实现基础概率的计算&#xff0c;帮助学生学习如何解决简单的概率问题&#xff0c;并培养逻辑推理和编程思维。 关键词 小学奥数Python Cangjie概率计算 一、题目描述 假设有一个袋子中有 5 个红球和 3 个蓝球&#xff0c;每次从袋子中随机…

Face2QR:可根据人脸图像生成二维码,还可以扫描,以后个人名片就这样用了!

今天给大家介绍的是一种专为生成个性化二维码而设计的新方法Face2QR&#xff0c;可以将美观、人脸识别和可扫描性完美地融合在一起。 下图展示为Face2QR 生成的面部图像&#xff08;第一行&#xff09;和二维码图像&#xff08;第二行&#xff09;。生成的二维码不仅忠实地保留…