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

VUE3 -综合实践(Mock+Axios+ElementPlus)

目录

前言

目标

1.工程创建 

2.Mock 

2.1 配置Mock

 扩 展

2.2 定义模拟数据 

2.3 创建Mock服务器

3.导入ElementPlus

4.表格页面搭建 

5.动态路由跳转  

6.详情页面的制作 


前言

        基于前文 VUE3详细入门,我们对VUE3的基本使用有了初步的了解,下面通过一个简单的实例,进一步熟悉VUE3工程的搭建。

目标

 制作一个表格页面,使用Mock生成虚拟数据,模拟后端发送的数据。点击Detail按钮,会跳转到对应的详情界面,显示对应行id。点击返回按钮则会回到主页面。

 详情界面:

 

1.工程创建 

在工程目录下,使用create-vue创建项目,在终端中输入以下命令,进行项目初始化:

npm init vue@latest

设置好项目名称,和包含功能,本次项目使用TypeScript语言以及用到Router。 

 将创建好的项目使用WebStorm打开(也可以使用VScode,Hbuilder等工具),在终端中输入npm install 命令,导入必要的工具包

2.Mock 

Mock(模拟)是一种在软件开发和测试中常用的技巧,用于创建模拟的对象、数据或服务,以替代真实的组件或外部依赖。Mock 的主要目的是在开发和测试过程中提供一种可控的、可预测的环境,帮助开发者隔离依赖,专注于当前开发或测试的功能。

2.1 配置Mock

在终端中输入以下命令:

npm install mockjs --save-dev
// 或者使用下面的命令
npm i --save-dev @types/mockjs

 扩 展

npm(Node Package Manager)是 Node.js 的包管理器,用于安装、管理 Node.js 项目中的依赖包。就好像Python当中的pip一样。命令常用的参数配置如下:

参数作用适用场景
--save 或 -S将依赖项添加到生产依赖(dependencies)中项目运行时必须的库
--save-dev 或 -D将依赖项添加到开发依赖(devDependencies)中开发过程需要,生产环境用不着的工具
-g全局安装命令行工具
--save-exact将依赖项的版本号精确写入package.json需要严格指定版本的情况
--no-save不将依赖项添加到package.json特殊情况或临时安装(不推荐)

2.2 定义模拟数据 

 在src文件夹下,新建mock文件夹,在mock文件夹中再次新建data文件夹,用于存放我们生成的模拟数据格式。新建user.ts文件,存放我们生成的模拟用户数据,代码如下:

import Mock from 'mockjs'function generateListData() {return Mock.mock({// 返回的数据'list|10': [{         // 列表包含10个数据'id|+1': 1, // id 每次递增 1,初始为1'name': '@cname', // 随机生成中文姓名'age|18-60': 1, // 年龄在 18 到 60 之间随机'email': '@email', // 随机生成邮箱'ip':'@ip','avatar': "@image('200x200','red','#111','FJNU')",//生成图片,参数:size, background, foreground, text'date': "@date"}]})
}// 导出数据生成函数
export { generateListData }

2.3 创建Mock服务器

在mock文件下,新建index.ts文件,用于创建我们的Mock服务器,模拟后端实际情况:

import Mock from 'mockjs';
import { generateListData } from './data/user.ts';// 拦截 GET 请求 /api/user
Mock.mock('/api/user', 'get', () => {return generateListData();
});

这样,当我们在前端发起对路径 '/api/user' Get请求,就会返回我们的user模拟数据。最终Mock的结构如下:

写完之后,记得在main.ts中导入我们mock的index文件!具体可见下节导入代码。 

3.导入ElementPlus

ElementPlus是VUE3中常用的组件库,我们可以使用它,快速构建许多组件。

官网链接:一个 Vue 3 UI 框架 | Element Plus

而导入ElementPlus,官方指南中实际上已经介绍的非常详细了。

首先在我们项目的终端中输入以下命令:

npm install element-plus --save

 接着在src文件下的main.ts文件中,导入ElementPlus依赖

import './assets/main.css'
import './mock/index.ts'             // 导入我们的mock服务器文件
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
import router from './router'const app = createApp(App)app.use(createPinia())
app.use(ElementPlus)
app.use(router)app.mount('#app')

4.表格页面搭建 

我们可以在ElementPlus官网中的组件,找到表格组件

 选择你想要导入的表格样式,直接复制代码到项目就可以了。

 有了样式之后,接下来我们就该渲染数据了。那么首先我们得先获取数据。在页面加载的时候,从后端获取数据到前端。所以我们可以选择在onMounted的生命周期的时候,向后端发起数据请求。

const tableData = ref([])
const router = useRouter()
onMounted(()=>{axios.get('/api/user').then(res=>{console.log(res)tableData.value = res.data.list})
})

使用Axios向Mock服务器对应的路径发起Get请求,我们在浏览器中通过F12开启控制台,查看打印出返回的结果res,可以看到数据是在res的data的list中,我们将对应数据赋值给我们的前端变量tableData就可以拿到数据了。

 有了表格数据之后,我们就可将数据渲染到表格上了(具体规则参照ElementPlus官网):


<template><el-table :data="tableData" style="width:1000px"><el-table-column fixed prop="id" label="id" width="60" /><el-table-column width="60" label="头像"><template #default="{ row }"><img :src=row.avatar alt="touxiang" style="width: 100%; height:auto" /></template></el-table-column><el-table-column prop="name" label="Name" width="120" /><el-table-column prop="email" label="Email" width="180" /><el-table-column prop="ip" label="ip" width="160" /><el-table-column prop="age" label="Age" width="120" /><el-table-column prop="date" label="注册时间" width="180" /><el-table-column label="操作"><template #default="{ row }"><el-button link type="primary" size="small" @click="GetDetail(row.id)" >Detail</el-button><el-button link type="primary" size="small" @click="Edit(row.id)">Edit</el-button></template></el-table-column></el-table>
</template>

5.动态路由跳转  

我们在route中的index文件中,创建我们的跳转页面AboutView的路由,使用懒加载的方式,由于是动态路由,我们记得开启路由的prop属性,接收路径参数。 

import { createRouter, createWebHistory } from 'vue-router'const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'Home',component: () => import('../views/HomeView.vue'),},{path: '/about/:id',name: 'About',component: () => import('../views/AboutView.vue'),props:true}],
})export default router

 而在我们的表格界面,我们为Detail按钮绑定以下函数,进而实现页面的跳转:

const GetDetail = (id:number) =>{// router.push(`/about/${id}`);router.push({name:'About',params:{id:id}})
}

有两种写法,第一种为使用反引号+美元符跳转,第二种为使用name+params参数跳转。

注意第二种方法中的name对应的就是路由文件当中定义的路由name,这里的name参数并不能替换为path参数,否则会报错。 

6.详情页面的制作 

我们在AboutView界面,使用一个useRoute实例,用.params方法获取动态路由中的参数。

而在返回按钮中,我们使用router.go(-1)返回到我们的上一级页面。 

<script setup lang="ts">import { useRoute } from 'vue-router'import router from '@/router'import { onMounted } from 'vue'const route = useRoute()const id = route.params.idonMounted(()=>{console.log(id)})const back = ()=>{router.go(-1)}
</script><template><el-col><el-row><h1>This is an about page</h1></el-row><el-row><h2>我的id:{{id}}</h2></el-row><el-row><el-button type="primary" @click="back">返回</el-button></el-row></el-col>
</template>

注意,useRoute的实例创建一定得在函数之外,setup之内,否则会出现错误! 

http://www.xdnf.cn/news/6052.html

相关文章:

  • 基于Matlab的非线性Newmark法用于计算结构动力响应
  • 如何查看打开的 git bash 窗口是否是管理员权限打开
  • Oracle 中的虚拟列Virtual Columns和PostgreSQL Generated Columns生成列
  • win11 安装 wsl ubuntu 18.04后换源失败!
  • Void: Cursor 的开源平替
  • ET MessageQueue类分析
  • 汽车免拆诊断案例 | 2015款路虎极光车组合仪表提示“充电系统故障”
  • 第二个五年计划!
  • Android清单文件
  • No module named ‘OpenGL‘
  • 【SSL部署与优化​】​​HTTP/2与HTTPS的协同效应
  • Python uv包管理器使用指南:从入门到精通
  • 5.14本日总结
  • 地磁-惯性-视觉融合制导系统设计:现代空战导航的抗干扰解决方案
  • vue-ganttastic甘特图label标签横向滚动固定方法
  • ssh connect to remote gitlab without authority
  • 计算机网络-MPLS LDP基础实验配置
  • 在Oracle到GreatSQL迁移中排序规则改变引发的乱码问题分析及解决
  • 算法每日刷题 Day6 5.14:leetcode数组1道题,用时30min,明天按灵茶山艾府题单开刷,感觉数组不应该单算
  • 图论part10 bellman_ford算法
  • HCIP-BGP综合实验
  • 鸿蒙OSUniApp 实现一个精致的日历组件#三方框架 #Uniapp
  • AGI大模型(16):向量检索之基于向量检索的RAG实现
  • git仓库初始化
  • 【华为HCIP | 华为数通工程师】821—多选解析—第二十四页
  • AWS技术助力企业满足GDPR合规要求
  • MongoDB入门
  • 歌词滚动效果
  • MFC 调用海康相机进行软触发
  • 在Electron中实现文件下载、保存和执行功能的完整教程