Electron-vue实战(二)— 请求Mock数据渲染页面

作者:狐狸家的鱼

本文链接

GitHub:sueRimn

一、环境搭建

1、安装Mock.js

如果仅仅用作脱离后台的模拟数据,就安装在开发环境中:

  1. npm install mockjs -D

2、安装axios-mock-adapter

axios-mock-adapter是一款axios的请求模拟调试器,可以使用它来实现请求拦截并模拟后台回复。

  1. npm install axios-mock-adapter -D

二、使用

(1)建立文件

src/renderer目录下新建mock文件夹与api文件夹,然后mock文件夹下建立data文件夹存放各类模拟数据,再建立index.js文件与mock.js文件,如下:

  1. // mock
  2. mock
  3. ├─ data
  4. ├─ flignt.js
  5. └─ planList.js
  6. ├─ index.js
  7. └─ mock.js
  8. // api
  9. api
  10. ├─ api.js
  11. └─ index.js

api文件下下的api.js用于封装接口函数。

(2)模拟数据

打开data/planList.js

关于如何Mcok数据在官网已经提及,简单明了。

Mcok.mock()是数据模板,一共有五种方式。

以下数据作为示例使用:

  1. // 引入mock
  2. import Mock from 'mockjs'
  3. const Random = Mock.Random
  4. const List = []
  5. const count = 300
  6.  
  7. for (let i = 0; i < count; i++) {
  8. List.push(Mock.mock({
  9. id:Random.integer(2, 10), // 随机生成由2-10的整数
  10. name: Random.cname(), // 名字
  11. 'sex|1': ['男', '女'], // 属性名sex|规则:属性值 从数组里随机选一个
  12. date: Random.date(), // 默认日期为Y-M-D
  13. port: Random.string('upper', 2), // 随机的两个大写字母构成的字符串
  14. bay: Random.string('lower', 2), // 随机的两个小写字母构成的字符串
  15. externalState Random.csentence(3), // 三个字构成的一段文语句
  16. 'vipGrade|1': ['★', '★★', '★★★'], // 随机选择
  17. }))
  18. }

第一种:Mock.mock(template)

仅根据数据模板生成模拟数据。

  1. List.push(Mcok.mock(...)) // 里面的数据即为模板数据生成的

第二种:Mock.mock(rurl, template)

记录数据模板。当拦截到匹配 rurl 的 Ajax 请求时,将根据数据模板 template生成模拟数据,并作为响应数据返回。

即生成模板数据之后,可以用Mock拦截模板数据

  1. Mock.mock('/flight/list',List)

第三种:Mock.mock(rurl, function( options ) )

记录用于生成响应数据的函数。当拦截到匹配 rurl 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。

  1. Mock.mock('/flight/list', function(options))

第四种:Mock.mock(rurl, rtype, template)

记录数据模板。当拦截到匹配 rurl 和 rtype 的 Ajax 请求时,将根据数据模板 template 生成模拟数据,并作为响应数据返回。

这种是比较常用的。

  1. Mock.mock('/flight/list', 'post|get', List)

第五种:Mock.mock(rurl, rtype, function( options ) )

记录用于生成响应数据的函数。当拦截到匹配 rurl 和 rtype 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。

  1. Mock.mock('/flight/list', 'post|get', function(options))

(3)封装接口函数

api/api.js中封装接口函数:

  1. import axios from 'axios'
  2.  
  3. let baseURL = '' // 自定义请求路径
  4. // 获取列表分页
  5. export const getPlanListPage = params => {
  6. return axios.get(`${baseURL}/flight/getListPage`, { params: params })
  7. }

(4)拦截请求

由于我们使用的是axios-mock-adapter请求模拟调试器,可以直接在mock.js中写:

  1. import axios from 'axios'
  2. import MockAdapter from 'axios-mock-adapter'
  3. import { List } from './data/planList'
  4. let _planList = List
  5.  
  6. export default {
  7. bootstrap () {
  8. // 模拟调试器实例
  9. let mock = new MockAdapter(axios)
  10.  
  11. // mock success request
  12. mock.onGet('/success').reply(200, {
  13. msg: 'success'
  14. })
  15.  
  16. // mock error request
  17. mock.onGet('/error').reply(500, {
  18. msg: 'failure'
  19. })
  20.  
  21. // 获取列表(分页) 模拟接收'/flight/getListPage'接口
  22. mock.onGet('/flight/getListPage').reply(config => {
  23. let { page, pageSize, id } = config.params
  24. let total = mockList.length // 数据总数
  25. let mockList = _planList.filter((u, index) => index < pageSize * page && index >= pageSize * (page - 1)) // 分页数据显示
  26. return new Promise((resolve, reject) => { // 返回响应数据
  27. setTimeout(() => {
  28. resolve([200, {
  29. total: total,
  30. list: mockList
  31. }])
  32. }, 1000)
  33. })
  34. })
  35. }
  36. }

(5)渲染数据

简单情况下,一般直接在页面中渲染就可以了,如果数据比较多,单页面之间存在共享的数据,可以使用Vuex进行数据存储管理,这个会在单独的博客中详细描述,这里只做简单的请求数据,渲染处理:

  1. import { getPlanListPage } from '@/api/api'
  2. export default {
  3. components: {
  4. ListForm
  5. },
  6. data () {
  7. return {
  8. listLoading: false, // 加载效果
  9. total: 0, // 数据总数
  10. currentPage: 1, // 当前页
  11. pageSize: 20, // 每页数据数量
  12. tableData: [], // 数据
  13. multipleSelection: []
  14. }
  15. },
  16. mounted () {
  17. this.getPlanList()
  18. },
  19. computed: {
  20. ...mapGetters('planList', ['list'])
  21. },
  22. methods: {
  23. getPlanList () {
  24. let para = {
  25. page: this.currentPage,
  26. pageSize: this.pageSize
  27. }
  28. this.listLoading = true
  29. this.$axios.get('/flight/getListPage', {para: para})
  30. .then(res => {
  31. console.log(res.data)
  32. this.total = res.data.total
  33. this.tableData = res.data.list
  34. this.listLoading = false
  35. })
  36. .catch(error => {
  37. console.log(error)
  38. console.log()
  39. }),
  40. // 显示每页多少条数据
  41. handleSizeChange (val) {
  42. this.pageSize = val
  43. this.currentPage = 1
  44. this.getPlanList()
  45. },
  46. // 显示当前页数
  47. handleCurrentChange (val) {
  48. this.currentPage = val
  49. this.getPlanList()
  50. }
  51. }
  52. <!-- 表格数据 -->
  53. <el-table
  54. :data="tableData"
  55. highlight-current-row
  56. style="width: 100%;margin-bottom: 20px;"
  57. height="800px"
  58. v-loading="listLoading"
  59. size="medium"
  60. class="planListTable el-table__column-filter-trigger"
  61. @cell-dblclick="rowDbClick"
  62. >
  63. </el-table>
  64.  
  65. <!-- 分页 -->
  66. <el-col :span="24" class="">
  67. <el-pagination
  68. background
  69. @size-change="handleSizeChange"
  70. @current-change="handleCurrentChange"
  71. :current-page="currentPage"
  72. :page-sizes="[20, 50, 100]"
  73. :page-size="pageSize"
  74. layout="total, sizes, prev, pager, next, jumper"
  75. :total="total"
  76. style="float:right;"
  77. >
  78. </el-pagination>

最终效果如下:

Electron-vue实战(二)— 请求Mock数据渲染页面的更多相关文章

  1. vue 在发送axios请求时数据渲染问题

    这是我请求的json格式的数据 一开始在vue用普通的数据渲染,更改为vue后使用v-for 发现没办法渲染上去了. obj.data就是以上数据. 必须加上这三行给this随意赋个值,神奇的事情就会 ...

  2. 【vue】本地开发mock数据支持

    项目离不开数据渲染的支持,为本地开发配置 数据  支持. (一)方式一:安装JSON Server搭建mock数据的服务器 json Server 是一个创建 伪RESTful服务器的工具. 配置流程 ...

  3. vue 项目初始化、mock数据以及安装less

    vue 创建一个项目 1.首先建立一个空文件夹,然后将这个文件夹要放到码云或者其他代码管理平台. 例如码云: 在码云上建立一个项目,然后在控制台进入这文件夹执行 git clone 地址是码云上创建的 ...

  4. vue使用axios请求后端数据

    1. 安装axios $ npm install axios 2.在main.js里面导入axios import axios from 'axios' Vue.prototype.$http = a ...

  5. Vue中如何书写js来渲染页面填充数据的部分代码

    new Vue({ el:"#app" , data:{ user:{ id:"", username:"", password:" ...

  6. vue简单的请求api并渲染到表格

    环境 vue3.11 组件库 https://element-plus.gitee.io/#/zh-CN 开始 初始化一个项目 App.vue <template> <div> ...

  7. 3-1 vue生存指南 - todolist实现-数据渲染

    由于Vue.js作者是中国人,会说汉语,所以国内生态会更好一点.Vue.js作者是尤雨溪,

  8. Vue获取后端数据 渲染页面后跳转

    主页面 <template> <div> <ul v-for="item in courseList"> <router-link :to ...

  9. vue从后台拿数据渲染页面图片

    <div class="list-content"> <div v-for="goods in goodsList" class=" ...

随机推荐

  1. JSP相关学习

    动态页面技术(JSP/EL/JSTL) <!-- jsp的三种脚本方式 --> <% int i = 5; //这是单行注释 /*这是多行注释*/ %> <%=i%> ...

  2. 10.VScode Debug——2019年12月12日

    title: vscode debug date: "2019-09-17 16:17:16" tags: 技巧 categories: 技术驿站 1.为什么需要调试 写了很多行代 ...

  3. autoit3 脚本自动安装实例

    软件自动安装的相关实例!贴出来用于参考,并部分相关语法与示例 #RequireAdmin If DriveMapGet("T:")=="" Then Drive ...

  4. 教你建立SQL数据库的表分区

    1)新建一个数据库 2)添加几个文件组 3)回到“常规”选项卡,添加数据库文件 看到用红色框框起来的地方没?上一步中建立的文件组在这里就用上了.再看后面的路径,我把每一个文件都单独放在不同的磁盘上,而 ...

  5. 使用PowerShell下载必应图片

    今天想聊聊POWERSHELL对于WEB页面的一些应用,本人也是最近才发觉其实PS也是可以做爬虫的...所以想抛砖引玉给大家一个思路. 这次要用到的主要命令是 invoke-webrequest 先来 ...

  6. C# 调用windows时间同步服务获取准确时间

    //创建一个Daytime类代码如下:using System; using System.Collections; using System.Collections.Generic; using S ...

  7. chromedriver与chrome版本映射表(更新至v2.46)

    chromedriver版本 支持的Chrome版本 v2.46 v71-73 v2.45 v70-72 v2.44 v69-71 v2.43 v69-71 v2.42 v68-70 v2.41 v6 ...

  8. soj#552 449E Jzzhu and Squares

    分析 https://www.cnblogs.com/Memory-of-winter/p/11209128.html 代码 #include<bits/stdc++.h> using n ...

  9. 2.2寸(14PIN)TFT液晶屏STM32 SPI 控制

    屏幕如图所示,共14个IO口(也可能只有13个),控制屏幕的有9个IO口 详细版介绍见:http://www.ciast.net/post/20151112.html 反面IO口图: 连接通过SPI方 ...

  10. Mac定时执行脚本_服务launchctl

    Mac 设置自动执行定时任务, 步骤: 1. 编写plist 2.将plist放入该目录下 ~/Library/LaunchAgents 3.命令启动 添加: launchctl load /Syst ...