Vue.js 前端开发实战之 10-网络请求和 UI 组件库

Mock.js

Mock.js 概述

Mock.js 一种模拟后端接口的解决方案,用于生成随机数据,拦截 Ajax 请求。

  • 前后端分离:前端工程师可以模拟接口数据,独立于后端进行开发。
  • 增加单元测试的真实性:通过随机数据,模拟各种场景。
  • 开发无侵入:不需要修改现有的代码,就可以拦截 Ajax 请求,返回模拟的响应数据。
  • 数据类型丰富:支持生成随机文本、日期、邮箱、图片、地址等数据。
  • 方便扩展:支持扩展更多数据类型,支持自定义函数和正则表达式。

Mock.js 文档:http://mockjs.com/

Mock.js 安装

在 Vue CLI 项目中,使用 Mock.js,需要先安装 Mock.js 依赖。


示例:安装 Mock.js

终端执行:

# 安装Mock.js依赖 npm install mockjs --save-dev

在 GUI 中也可以安装 Mock.js 依赖:


Mock.js 初体验

Mock.js 依赖安装完成后,在 Vue CLI 中编写 Mock.js 的配置文件。


示例:Mock.js 初体验

Mock.js 配置文件(src/mock/index.js):

// 加载Mock依赖 const Mock = require('mockjs') // 创建模拟数据 // 参数1:数据模板对象 const data = Mock.mock({ userList: [{ id: 1, name: '张三' }, { id: 2, name: '李四' }, { id: 3, name: '王五' }] }) console.log(data)

终端执行:

cd mock node index.js

示例效果:


Mock.js 语法

Mock.js 语法规范分为:数据模板定义规范和数据占位符定义规范。

数据模板定义规范:

'属性名|生成规则': 属性值

数据占位符定义规范:

@占位符(...参数)

示例:生成 Mock 数据

Mock.js 配置文件(src/mock/index.js):

// 加载Mock依赖 const Mock = require('mockjs') // 创建模拟数据 const data = Mock.mock({ // 生成一个userList数组,数组长度为4 'userList|4': [{ // 使用工具类或占位符生成随机数据 id: Mock.Random.id(), name: '@cname()', birthday: '@date("yyyy-MM-dd")', age: '@integer(18, 60)' }] }) console.log(data)

示例效果:


mock 方法

mock 方法的基本用法:

Mock.mock(数据模板) Mock.mock(请求地址, [, 请求方式-小写], 数据模板) Mock.mock(请求地址, [, 请求方式-小写], function(options){ // options:请求对象 // options.body:请求参数 // 执行函数 })

Axios

Axios 概述

Axios 是一个基于 Promise 的 HTTP 库,可以发送 GET、POST、PUT、DELETE 等请求。

Axios 文档:http://www.axios-js.com/

Axios 和 Ajax:Axios 是通过 Promise 实现对 Ajax 技术的一种封装,就像 jQuery 对 Ajax 的封装一样,Axios 比 Ajax 更强大。

Axios 的主要特性:

  • 支持所有的 API。
  • 支持拦截请求和响应。
  • 可以转换请求数据和响应数据,并可以将响应的内容自动转换为 JSON 类型的数据数据。
  • 安全性高,客户端支持防御跨站请求伪造(CSRF)。

Axios 安装

在 Vue CLI 中,使用 Axios,需要先安装 Axios 依赖。

推荐使用 GUI 安装 vue-cli-plugin-axios 插件,该插件安装完成后,会生成 Axios 的配置文件,并在 main.js 文件中导入 Axios。

通过终端安装 Axios 依赖,需要自行添加 Axios 配置文件,并全局注册 Axios。


示例:安装 Axios

终端执行:

# 安装axios npm install axios

在 GUI 中也可以安装 Axios 插件:


Axios 语法

Axios 发送 GET 请求的基本用法:

axios.get('请求路径') .then(ret => { // ret:包含请求和响应信息 // ret.data:请求返回的数据结果 // 请求成功执行函数 }).catch(error => { // error:异常对象 // 请求失败执行函数 })

Axios 发送 POST 请求的基本用法:

axios.post('请求路径', 请求参数) .then(ret => { // ret:包含请求和响应信息 // ret.data:请求返回的数据结果 // 请求成功执行函数 }).catch(error => { // error:异常对象 // 请求失败执行函数 })

Axios 发送 PUT 请求的基本用法:

axios.put(...)

Axios 发送 DELETE 请求的基本用法:

axios.delete(...)

Axios 初体验

后端接口不完善时,可以使用 Mock.js 模拟数据,然后使用 Axios 发送请求以实现测试效果。


示例:Axios 初体验

Mock.js 配置文件(src/mock/index.js):

// 一般在做前后端数据交互时,后端会返回code + message + data的数据形式 // 加载Mock依赖 const Mock = require('mockjs') // 获取用户列表 Mock.mock('/api/getUserList', 'get', { code: 200, message: '获取成功', 'data|4': [{ id: Mock.Random.id(), name: '@cname()', birthday: '@date("yyyy-MM-dd")', age: '@integer(18, 60)' }] }) // 新增用户 Mock.mock('/api/addUser', 'post', function (options) { // 调试输出请求参数 console.log(options.body) return { code: 200, message: '新增成功' } })

项目入口配置文件(src/main.js):

import mock from './mock'

根组件(src/App.vue):

<template> <div id="app"> <button @click="getUserList">获取用户列表</button> <button @click="addUser">新增用户</button> </div> </template> <script> export default { name: 'app', methods: { getUserList() { axios.get('/api/getUserList') .then(ret => { console.log(ret.data) }) }, addUser() { axios.post('/api/addUser', { name: '张三', age: 18 }) .then(ret => { console.log(ret.data) }) } } } </script>

示例效果:


ElementUI

ElementUI 概述

ElementUI 是一套由饿了么团队为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。

ElementUI 参考文档:https://element.eleme.cn/#/zh-CN

ElementPlus 是一套基于 Vue 3,面向设计师和开发者的组件库。

ElementPlus 参考文档:https://element-plus.org/zh-CN/#/zh-CN

ElementUI 提供了丰富的组件,包含布局组件、图标组件、按钮组件、表单组件、表格组件、进度条组件、弹框组件等。

ElementUI 安装

在 Vue CLI 中,使用 ElementUI,需要先安装 ElementUI 依赖。


示例:安装 ElementUI

在 GUI 中安装 ElementUI 插件,快速搭建一个基于 ElementUI 的项目:


ElementUI 布局

使用 ElementUI 进行布局设计,建议按照布局容器-布局-其他组件的顺序进行编码。

在 ElementUI 中,布局容器标签有:

  • el-container 标签:外层容器,其他容器全部放在外层容器中。
  • el-header 标签:顶栏容器,用于放置如网站顶部菜单栏组件。
  • el-aside 标签:侧边栏容器,用于放置如网站侧边菜单栏组件。
  • el-main 标签:主要区域容器,用于放置如网站主体内容组件。
  • el-footer 标签:底栏容器,用于放置网页底部声明组件。

通过这些布局容器组合使用,可以快速创建出一系列基础网页结构。

布局容器创建完成后,使用布局组件为网页创建布局。ElementUI 通过基础的 24 分栏,迅速简便地创建布局。

在 ElementUI 中,布局标签有:

  • el-row 标签:定义行。
  • el-col 标签:定义列。

el-row 标签的基本属性:

名称描述
gutter这一行里面的列之间的间隙

el-col 标签的基本属性:

名称描述
span列合并
xs/sm/md/lg/xl列的响应式布局

示例:ElementUI 布局

根组件(src/App.vue):

<template> <!-- <el-container>:所有布局容器全部放在外层布局容器中 <el-main>:定义主体部分 --> <el-container> <el-main> <router-view/> </el-main> </el-container> </template>

首页组件(src/viewsIndex.vue):

<template> <!-- <el-row>:定义行 gutter:这一行里面每一列之间的间隙 <el-col>:定义列 md:在中等屏幕大小下占12个格子 --> <el-row :gutter="10"> <el-col :md="12"> item </el-col> </el-row> </template>

路由配置文件(src/router/index.js):

{path:'/',component:()=>import('@/views/Index.vue')}

示例效果:


ElementUI 按钮组件

在 ElementUI 中,按钮组件使用 el-button 标签定义。

el-button 标签的基本属性:

名称描述
size按钮尺寸,可选 medium/small/mini
type按钮类型,可选 primary/success/warning/danger/info/text
disabled按钮是否禁用,使用 v-bind 绑定 true/false
round按钮是否是圆角按钮,使用 v-bind 绑定 true/false
circle按钮是否是圆形按钮,使用 v-bind 绑定 true/false

示例:ElementUI 按钮组件

根组件(src/App.vue):

<template> <div> <el-row> <el-button>默认按钮</el-button> <el-button type="primary">主要按钮</el-button> <el-button type="success">成功按钮</el-button> <el-button type="info">信息按钮</el-button> <el-button type="warning">警告按钮</el-button> <el-button type="danger">危险按钮</el-button> </el-row> <el-row> <el-button plain>朴素按钮</el-button> <el-button type="primary" plain>主要按钮</el-button> <el-button type="success" plain>成功按钮</el-button> <el-button type="info" plain>信息按钮</el-button> <el-button type="warning" plain>警告按钮</el-button> <el-button type="danger" plain>危险按钮</el-button> </el-row> <el-row> <el-button round>圆角按钮</el-button> <el-button type="primary" round>主要按钮</el-button> <el-button type="success" round>成功按钮</el-button> <el-button type="info" round>信息按钮</el-button> <el-button type="warning" round>警告按钮</el-button> <el-button type="danger" round>危险按钮</el-button> </el-row> <el-row> <el-button icon="el-icon-search" circle></el-button> <el-button type="primary" icon="el-icon-edit" circle></el-button> <el-button type="success" icon="el-icon-check" circle></el-button> <el-button type="info" icon="el-icon-message" circle></el-button> <el-button type="warning" icon="el-icon-star-off" circle></el-button> <el-button type="danger" icon="el-icon-delete" circle></el-button> </el-row> </div> </template>

示例效果:


ElementUI 表格组件

ElementUI 组件库提供了 Table 表格组件,用于展示多条结构类似的数据,可以对数据进行排序、筛选、对比或其他自定义操作。

在 ElementUI 中,使用 el-table 标签定义表格,使用 el-table-column 标签定义表格中的列。

el-table 标签的基本属性:

名称描述
data绑定表格显示的数据对象/列表/数组
stripe表格是否添加斑马线效果(即隔行变色)
border表格是否添加边框

el-table-column 标签的基本属性:

属性描述
prop绑定列数据,对应表格数据中的某一个字段名
label列标题
width列宽度
align列内容的对齐方式,可选 left/center/right

示例:ElementUI 表格组件

根组件(src/App.vue):

<template> <!-- <el-table>:定义表格 data:绑定表格数据 border:添加表格边框 <el-table-column>:定义表格的每一列 prop:绑定列数据 label:列标题 width:列宽 --> <el-table :data="tableData" border style="width: 100%"> <el-table-column prop="date" label="日期" width="180"></el-table-column> <el-table-column prop="name" label="姓名" width="180"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </template> <script> export default { data() { return { // 定义表格数据列表 tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1517 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1519 弄' }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1516 弄' }] } } } </script>

示例效果:


ElementUI 表单组件

ElementUI 提供了 Form 表单组件,基础的表单包含输入框、单选框、下拉选择框、开关、滑块等组件,用以收集、校验、提交数据。

在 ElementUI 中,使用 el-form 标签定义表单。

el-form 标签的基本属性:

名称描述
inline是否是水平表单
label-position表单域标签的位置,可选 left/right/top
size表单内组件的大小,可选 medium/small/mini

在 ElementUI 组件库中提供了一些表单相关的组件:

  • 使用 el-input 标签定义表单输入框。
  • 使用 el-select 和 el-option 标签定义下拉选择框。
  • 使用 el-radio 标签定义单选框。
  • 使用 el-checkbox 标签定义多选框。

示例:ElementUI 表单组件

根组件(src/App.vue):

<template> <el-form ref="form" :model="form" label-width="80px"> <el-form-item label="活动名称"> <el-input v-model="form.name"></el-input> </el-form-item> <el-form-item label="活动区域"> <el-select v-model="form.region" placeholder="请选择活动区域"> <el-option label="区域一" value="shanghai"></el-option> <el-option label="区域二" value="beijing"></el-option> </el-select> </el-form-item> <el-form-item label="活动时间"> <el-col :span="11"> <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker> </el-col> <el-col class="line" :span="2">-</el-col> <el-col :span="11"> <el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker> </el-col> </el-form-item> <el-form-item label="即时配送"> <el-switch v-model="form.delivery"></el-switch> </el-form-item> <el-form-item label="活动性质"> <el-checkbox-group v-model="form.type"> <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox> <el-checkbox label="地推活动" name="type"></el-checkbox> <el-checkbox label="线下主题活动" name="type"></el-checkbox> <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox> </el-checkbox-group> </el-form-item> <el-form-item label="特殊资源"> <el-radio-group v-model="form.resource"> <el-radio label="线上品牌商赞助"></el-radio> <el-radio label="线下场地免费"></el-radio> </el-radio-group> </el-form-item> <el-form-item label="活动形式"> <el-input type="textarea" v-model="form.desc"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="onSubmit">立即创建</el-button> <el-button>取消</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { name: '', region: '', date1: '', date2: '', delivery: false, type: [], resource: '', desc: '' } } }, methods: { onSubmit() { console.log('submit!'); } } } </script>

示例效果:


Vant 2

Vant 2 概述

Vant 2 是一套由有赞团队提供的基于 Vue 2 的轻量级的、可靠的移动端组件库。

Vant 2 文档:https://vant-contrib.gitee.io/vant/v2/#/zh-CN/

目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小程序版本。

Vant 2 提供了 65+ 个高质量组件,覆盖移动端主流场景。

Vant 2 初体验

在 Vue CLI 中,使用 Vant 2,需要先安装 Vant 2 依赖。


示例:Vant 2 初体验

在 GUI 中安装的 Vant 依赖版本 >4,无法在 Vue 2 中使用。

终端执行:

# 安装Vant2 npm i vant@latest-v2 -S

项目入口配置文件(src/main.js):

import Vant from 'vant'; import 'vant/lib/index.css'; Vue.use(Vant);

根组件(src/App.vue):

<template> <div id="app"> <van-button type="primary">主要按钮</van-button> <van-button type="info">信息按钮</van-button> <van-button type="default">默认按钮</van-button> <van-button type="warning">警告按钮</van-button> <van-button type="danger">危险按钮</van-button> </div> </template>

示例效果:


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

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

相关文章

Vue.js 前端开发实战之 09-服务器端渲染

初识服务器端渲染 客户端渲染概述 客户端渲染&#xff0c;即传统的单页面应用&#xff08;SPA&#xff09;模式&#xff0c;Vue.js 构建的应用程序默认情况下是一个 HTML 模板页面&#xff0c;只有一个 id 为 app 的 div 根容器&#xff0c;然后通过 webpack 打包生成 css、js …

RiPlus开心版日主题资源下载 知识付费资源

源码介绍&#xff1a;Riplus主题&#xff0c;付费资源素材下载查看系统&#xff0c;全新会员系统&#xff0c;注重会员体系分离&#xff0c; 一键开启关闭会员系统/单独付费系统&#xff0c;支持评论可见&#xff0c;付费可见&#xff0c;付费下载&#xff0c;视频缩略图播放&a…

LangChain调用Qwen3-0.6B无返回?Streaming排错指南

LangChain调用Qwen3-0.6B无返回&#xff1f;Streaming排错指南 1. 问题现象&#xff1a;明明启用了streaming&#xff0c;却等不到任何输出 你写好了LangChain调用代码&#xff0c;streamingTrue也加了&#xff0c;invoke()方法也执行了&#xff0c;终端却像卡住一样——既没…

云手机群控系统源码

源码介绍&#xff1a; Go 1.18 Node.js 16 pnpm 包管理器 ADB 工具&#xff08;必须安装并配置环境变量&#xff09; 看了下&#xff0c;是很多软件组合起来的&#xff0c;感觉很复杂。没测试。 下载地址 &#xff08;无套路&#xff0c;无须解压密码&#xff09;https://pan…

菜鸟乐园工具箱v1.0.1

源码介绍&#xff1a;测试下&#xff0c;在5/2的时候&#xff0c;接口可以正常使用下载地址&#xff08;无套路&#xff0c;无须解压密码&#xff09;https://pan.quark.cn/s/5d0664034200源码截图&#xff1a;

2026有代表性的GEO公司综合盘点,AI营销服务商全景

随着DeepSeek、豆包、Kimi、腾讯元宝等生成式AI助手日益成为用户获取商业信息的首选入口,“答案即流量”的时代已然全面到来。企业营销的核心命题,正从传统的“如何被搜索到”加速转向“如何被AI推荐”。在此背景下,…

别再盲目追求Wi-Fi全屋覆盖!真正完美的方案必须具备这些能力

别再盲目追求Wi-Fi全屋覆盖!真正完美的方案必须具备这些能力Posted on 2026-01-26 00:00 lzhdim 阅读(0) 评论(0) 收藏 举报如今,在追求高品质网络生活的当下,Wi-Fi全屋覆盖成为众多家庭与企业的刚需。但真正出…

CSS 拟真光影设计:从扁平到深度的技术复盘

用户界面设计在经历了长达十年的扁平化统治后&#xff0c;正在逐渐找回“体积感”。不同于早期的拟物化设计&#xff0c;现代的深度设计更强调光影逻辑的合理性而非纹理的逼真度。通过 CSS 的 box-shadow 和 gradient 属性的组合&#xff0c;开发者可以在网页上重建物理世界的光…

基于微信小程序的学生知识成果展示平台【源码+文档+调试】

&#x1f525;&#x1f525;作者&#xff1a; 米罗老师 &#x1f525;&#x1f525;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f525;&#x1f525;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…

基于微信小程序的网上商城【源码+文档+调试】

&#x1f525;&#x1f525;作者&#xff1a; 米罗老师 &#x1f525;&#x1f525;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f525;&#x1f525;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…

gym664651(Baozii Cup 3)

A. DeepTreek 首先,我们选择了一个子树拆下来去重新连接之后,剩下的树的形态就不重要了,我们只需要维护去掉以 \(u\) 为根的子树之后,每个深度的点的个数 \(cnt\) 这个可以通过类似于重链剖分中的合并方法做到整体…

企业AI创新实验室如何持续输出高质量成果?AI应用架构师的「目标-迭代-激励」架构体系

企业AI创新实验室的「成果续航密码」:AI应用架构师的「目标-迭代-激励」体系实践指南 关键词 企业AI创新实验室、目标管理、迭代开发、激励体系、AI应用架构、成果转化、持续创新 摘要 企业AI创新实验室往往陷入「启动易、续航难」的怪圈:要么项目偏离业务需求沦为「技术…

构建具有持续学习与适应能力的AI Agent

构建具有持续学习与适应能力的AI Agent 关键词&#xff1a;AI Agent、持续学习、适应能力、强化学习、迁移学习 摘要&#xff1a;本文聚焦于构建具有持续学习与适应能力的AI Agent这一前沿话题。首先介绍了相关背景&#xff0c;包括目的范围、预期读者等。接着阐述了核心概念及…

2025年教我学英语 - 常用句子

2025年教我学英语 - 常用句子一、 衣(Clothing)What size do you wear?你穿什么尺码? This T-shirt looks great on you.这件 T 恤你穿真好看。 Do you have this in another color?这个有别的颜色吗? I need to…

意识从哪里来:请你来回答

第四十六章&#xff1a;意识从哪里来 有一个不争的事实&#xff0c;人类的自信和骄傲来自我们的意识&#xff0c;我们的精神&#xff0c;我们的智慧。我们也多次思考&#xff1a;“意识从哪里来&#xff1f;”“意识是如何产生的&#xff1f;”本书《探索生命》第五章写了关于…

人类要超越自身语言系统,靠进化显然是不行的

我认为这才是科普的目的&#xff0c;我能告诉你们的东西本来就不多。科普在我这里的功能是启发&#xff0c;是记录思维。前面的章节都是依照现有的知识进行的&#xff0c;然而这一刻我想告诉你&#xff0c;大家可能会被我误导&#xff0c;或者被人类历史发展误导&#xff0c;这…

永磁同步电机驱动控制系统中MCU的抗干扰设计

——基于AS32S601系列微控制器的综合分析摘要永磁同步电机&#xff08;PMSM&#xff09;驱动控制系统作为现代工业自动化、新能源汽车及航空航天领域的核心执行单元&#xff0c;其运行可靠性直接决定了整个系统的性能与安全边界。本文以国科安芯AS32S601系列RISC-V架构微控制器…

【无人机编队】单领导-双跟随无人机协同编队控制附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#…

神奇助力!少样本学习应用助力AI应用架构师的发展

神奇助力&#xff01;少样本学习应用助力AI应用架构师的发展 摘要/引言 在当今AI技术飞速发展的时代&#xff0c;数据的规模似乎成为了模型性能的关键支撑。然而&#xff0c;海量数据的获取、标注往往伴随着高昂的成本与时间消耗。对于AI应用架构师而言&#xff0c;如何在数据…

寒假学习机选购指南:精准适配假期需求,清北道远助力高效提升

寒假是孩子查漏补缺、弯道超车的黄金期,也是摆脱盲目刷题、培养自主学习能力的关键阶段。不同于日常校内学习,寒假学习更注重“针对性补漏、阶段性衔接、高效化利用”,选择一款适配假期场景的学习机,既能减轻家长辅…