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

news2025/5/18 22:01:01

目录

前言

目标

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.id
 onMounted(()=>{
   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.coloradmin.cn/o/2378809.html

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

相关文章

NDS3211HV单路H.264/HEVC/HD视频编码器

1产品概述 NDS3211HV单路高清编码器是一款功能强大的音/视频编码设备&#xff0c;支持2组立体声&#xff0c;同时还支持CC(CVBS)字幕。支持多种音频编码方式。该设备配备了多种音/视频输入接口&#xff1a;HD-SDI数字视频输入、HDMI高清输入&#xff08;支持CC&#xff09;、A…

LeetCode热题100--206.反转链表--简单

1. 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&…

来一个复古的技术FTP

背景 10年前的老代码&#xff0c;需要升级springboot框架&#xff0c;在升级过程中&#xff0c;测试业务流程里&#xff0c;有FTP的下载业务&#xff0c;不管测试环境如何测试&#xff0c;都没有成功&#xff0c;最后只能自己搭建一个FTP服务器&#xff0c;写一个ftp-demo来测试…

OpenWebUI新突破,MCPO框架解锁MCP工具新玩法

大家好&#xff0c;Open WebUI 迎来重要更新&#xff0c;现已正式支持 MCP 工具服务器&#xff0c;但 MCP 工具服务器需由兼容 OpenAPI 的代理作为前端。mcpo 是一款实用代理&#xff0c;经测试&#xff0c;它能让开发者使用 MCP 服务器命令和标准 OpenAPI 服务器工具&#xff…

TRTC实时对话式AI解决方案,助力人机语音交互极致体验

近年来&#xff0c;AI热度持续攀升&#xff0c;无论是融资规模还是用户热度都大幅增长。2023 年&#xff0c;中国 AI 行业融资规模达2631亿人民币&#xff0c;较2022年上升51%&#xff1b;2024年第二季度&#xff0c;全球 AI 初创企业融资规模为 240 亿美金&#xff0c;较第一季…

Linux安全篇 --firewalld

一、Firewalld 防火墙概述 1、Firewalld 简介 firewalld 的作用是为包过滤机制提供匹配规则(或称为策略)&#xff0c;通过各种不同的规则告诉netfilter 对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式为了更加方便地组织和管理防火墙,firewalld 提供…

系分论文《论系统需求分析方法及应用》

系统分析师论文范文系列 【摘要】 2022年6月&#xff0c;我作为系统分析师参与了某金融机构“智能信贷风控系统”的建设项目。该系统旨在通过对业务流程的数字化重构&#xff0c;优化信贷审批效率并降低风险。项目涉及信贷申请、资质审核、风险评估、额度审批等核心流程&#x…

LIIGO ❤️ RUST: 12 YEARS

LIIGO &#x1f496; RUST: 12 YEARS 今天是RUST语言1.0发布十周年纪念日。十年前的今天&#xff0c;2015年的今天&#xff0c;Rust 1.0 正式发行。这是值得全球Rust支持者隆重纪念的日子。我借此机会衷心感谢Rust语言创始人Graydon Hoare&#xff0c;Mozilla公司&#xff0c;…

Trivy:让你时刻掌控的开源安全扫描器

深入了解 Trivy:全面的安全扫描工具 在如今互联网快速发展的时代,软件的安全性显得尤为重要。随着应用程序的复杂性增加,其可能带来的安全漏洞也在不断增多。如何快速、准确地发现这些潜在威胁是每个开发者和运维人员心中的课题。今天,我们将为大家介绍一个开源的安全扫描…

LlamaIndex 第八篇 MilvusVectorStore

本指南演示了如何使用 LlamaIndex 和 Milvus 构建一个检索增强生成&#xff08;RAG&#xff09;系统。 RAG 系统将检索系统与生成模型相结合&#xff0c;根据给定的提示生成新的文本。该系统首先使用 Milvus 等向量相似性搜索引擎从语料库中检索相关文档&#xff0c;然后使用生…

2022河南CCPC(前四题)

签到题目 #include <bits/stdc.h> using namespace std; #define int long long #define PII pair<int,int> #define fi first #define se second #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);void solve() {int n;cin>>…

谷歌浏览器(Google Chrome)136.0.7103.93便携增强版|Win中文|安装教程

软件下载 【名称】&#xff1a;谷歌浏览器&#xff08;Google Chrome&#xff09;136.0.7103.93 【大小】&#xff1a;170M 【语言】&#xff1a;简体中文 【安装环境】&#xff1a;Win10/Win11 【夸克网盘下载链接】&#xff08;务必手机注册&#xff09;&#xff1a; h…

高可用消息队列实战:AWS SQS 在分布式系统中的核心解决方案

引言&#xff1a;消息队列的“不可替代性” 在微服务架构和分布式系统盛行的今天&#xff0c;消息队列&#xff08;Message Queue&#xff09; 已成为解决系统解耦、流量削峰、异步处理等难题的核心组件。然而&#xff0c;传统的自建消息队列&#xff08;如RabbitMQ、Kafka&am…

「Mac畅玩AIGC与多模态41」开发篇36 - 用 ArkTS 构建聚合搜索前端页面

一、概述 本篇基于上一节 Python 实现的双通道搜索服务&#xff08;聚合 SearxNG 本地知识库&#xff09;&#xff0c;构建一个完整的 HarmonyOS ArkTS 前端页面。用户可在输入框中输入关键词&#xff0c;实时查询本地服务 http://localhost:5001/search?q...&#xff0c;返…

springCloud/Alibaba常用中间件之Seata分布式事务

文章目录 SpringCloud Alibaba:依赖版本补充Seata处理分布式事务(AT模式)AT模式介绍核心组件介绍AT的工作流程&#xff1a;两阶段提交&#xff08;**2PC**&#xff09; Seata-AT模式使用Seata(2.0.0)下载、配置和启动Seata案例实战前置代码添加全局注解 GlobalTransactional Sp…

Datawhale FastAPI Web框架5月第1次笔记

原课程地址&#xff1a; FastAPI Web框架https://www.datawhale.cn/learn/summary/164本次难点&#xff1a; 切换python的版本为3.10 作业过程 启动&#xff1a; jupyter notebook 首先我们要确保自己的python版本是3.10 import sys print(sys.version) 第一个fastapi…

操作系统:os概述

操作系统&#xff1a;OS概述 程序、进程与线程无极二级目录三级目录 程序、进程与线程 指令执行需要那些条件&#xff1f;CPU内存 需要数据和 无极 二级目录 三级目录

LLaMA-Factory:环境准备

一、硬件和系统 操作系统: Ubuntu 24.04.2 LTS&#xff08;64位&#xff09;GPU: NVIDIA RTX 4090 笔记本 GPU&#xff0c;16GB显存CPU: 建议高性能多核 CPU&#xff08;如 Intel i7/i9 或 AMD Ryzen 7/9&#xff09;以支持数据预处理&#xff0c;我的是32核。RAM: 至少 32GB&…

ArrayList-集合使用

自动扩容&#xff0c;集合的长度可以变化&#xff0c;而数组长度不变&#xff0c;集合更加灵活。 集合只能存引用数据类型&#xff0c;不能直接存基本数据类型&#xff0c;除非包装 ArrayList会拿[]展示数据

一分钟用 MCP 上线一个 贪吃蛇 小游戏(CodeBuddy版)

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 你好&#xff0c;我是悟空。 背景 上篇我们用 MCP 上线了一个 2048 小游戏&#xff0c;这次我们继续做一个 …