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

作者:狐狸家的鱼

本文链接

GitHub:sueRimn

一、环境搭建

1、安装Mock.js

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

npm install mockjs -D

2、安装axios-mock-adapter

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

npm install axios-mock-adapter -D

二、使用

(1)建立文件

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

// mock
mock
├─ data
│ ├─ flignt.js
│ └─ planList.js
├─ index.js
└─ mock.js
// api
api
├─ api.js
└─ index.js

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

(2)模拟数据

打开data/planList.js

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

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

以下数据作为示例使用:

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

第一种:Mock.mock(template)

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

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

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

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

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

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

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

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

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

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

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

这种是比较常用的。

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

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

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

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

(3)封装接口函数

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

import axios from 'axios'

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

(4)拦截请求

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

import axios from 'axios'
import MockAdapter from 'axios-mock-adapter'
import { List } from './data/planList'
let _planList = List export default {
bootstrap () {
// 模拟调试器实例
let mock = new MockAdapter(axios) // mock success request
mock.onGet('/success').reply(200, {
msg: 'success'
}) // mock error request
mock.onGet('/error').reply(500, {
msg: 'failure'
}) // 获取列表(分页) 模拟接收'/flight/getListPage'接口
mock.onGet('/flight/getListPage').reply(config => {
let { page, pageSize, id } = config.params
let total = mockList.length // 数据总数
let mockList = _planList.filter((u, index) => index < pageSize * page && index >= pageSize * (page - 1)) // 分页数据显示
return new Promise((resolve, reject) => { // 返回响应数据
setTimeout(() => {
resolve([200, {
total: total,
list: mockList
}])
}, 1000)
})
})
}
}

(5)渲染数据

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

import { getPlanListPage } from '@/api/api'
export default {
components: {
ListForm
},
data () {
return {
listLoading: false, // 加载效果
total: 0, // 数据总数
currentPage: 1, // 当前页
pageSize: 20, // 每页数据数量
tableData: [], // 数据
multipleSelection: []
}
},
mounted () {
this.getPlanList()
},
computed: {
...mapGetters('planList', ['list'])
},
methods: {
getPlanList () {
let para = {
page: this.currentPage,
pageSize: this.pageSize
}
this.listLoading = true
this.$axios.get('/flight/getListPage', {para: para})
.then(res => {
console.log(res.data)
this.total = res.data.total
this.tableData = res.data.list
this.listLoading = false
})
.catch(error => {
console.log(error)
console.log()
}),
// 显示每页多少条数据
handleSizeChange (val) {
this.pageSize = val
this.currentPage = 1
this.getPlanList()
},
// 显示当前页数
handleCurrentChange (val) {
this.currentPage = val
this.getPlanList()
}
}
<!-- 表格数据 -->
<el-table
:data="tableData"
highlight-current-row
style="width: 100%;margin-bottom: 20px;"
height="800px"
v-loading="listLoading"
size="medium"
class="planListTable el-table__column-filter-trigger"
@cell-dblclick="rowDbClick"
>
</el-table> <!-- 分页 -->
<el-col :span="24" class="">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
style="float:right;"
>
</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. Yii Ar model 查询

    Ar model 查询 参照表: CREATE TABLE tbl_user ( id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, username VA ...

  2. css 文字对齐

    // html <div>姓名</div> <div>手机号码</div> <div>账号</div> <div>密 ...

  3. 带有IBM大脑的浮动机器人被成功引导至太空

    近日,带有IBM大脑的浮动机器人被成功引导至太空,在接下来的装运前往国际空间站包近三吨的研究和再补给材料. 机器人的全名是CrewInteractiveMobileCompanion:Cimon.它看 ...

  4. 【学习笔记】虚树复习记(BZOJ2286 SDOI2011 消耗战)

    想写战略游戏却想不起来虚树T^T 所以就有了这篇复习记QwQ ——简介!—— 我们在处理树上问题的时候,dfs是一个常用手段,但是我们发现,如果一棵树上只有一部分关键点,每次dfs需要访问好多不是关键 ...

  5. 每天一个Linux命令:locate(19)

    locate locate命令 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中 ...

  6. 线程join方法 小demo

    1.第一个示例: package cn.threaddemo; public class T implements Runnable { public static int a = 0; @Overr ...

  7. ES6中类Class的super关键字

    super 关键字,既可以当作函数使用,也可以当作对象使用.在这两种情况下,它的用法完全不同. 1.super当做函数使用 super 作为函数调用时,代表父类的构造函数.ES6 要求,子类的构造函数 ...

  8. linux0.11内核源码——进程各状态切换的跟踪

    准备工作 1.进程的状态有五种:新建(N),就绪或等待(J),睡眠或阻塞(W),运行(R),退出(E),其实还有个僵尸进程,这里先忽略 2.编写一个样本程序process.c,里面实现了一个函数 /* ...

  9. 2015年6月发布了ECMAScript6版本

    2015年6月 node.js.npm | cnpm.cli angular2.x.react.js.Vue.js

  10. [题解]Yet Another Subarray Problem-DP 、思维(codeforces 1197D)

    题目链接:https://codeforces.com/problemset/problem/1197/D 题意: 给你一个序列,求一个子序列 a[l]~a[r] 使得该子序列的 sum(l,r)-k ...