mpvue学习笔记-之微信数据请求封装
简介
美团出品的mpvue已经开源出来很久了,一直说要进行一次实践,这不最近一次个人小程序开发就用上了它。
看了微信官方的数据请求模块--request,对比了下get和post请求的代码,发现如果在每一个地方都用request的话,那会有很多代码是冗余的,于是就准备自己封装一个,下面就记录一下封装过程。注释也写在下面的代码里了。
实现的结果
- 代码要简洁
- 无需每个页面引入一次
- Promise化,避免回调地狱
封装代码
//src/utils/net.js
import wx from 'wx';//引用微信小程序wx对象
import { bmobConfig } from '../config/bmob';//bmob配置文件const net = {get(url, data) {wx.showLoading({title: '加载中',//数据请求前loading,提高用户体验})return new Promise((resolve, reject) => {wx.request({url: url,data: data,method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECTheader: {'X-Bmob-Application-Id': bmobConfig.applicationId,'X-Bmob-REST-API-Key': bmobConfig.restApiKey,'Content-Type': 'application/json'}, // 设置请求的 headersuccess: function (res) {// successwx.hideLoading();if(res.statusCode!=200){wx.showToast({title: "网络出错,稍后再试",icon: "none"});return false;}resolve(res.data);},fail: function (error) {// failwx.hideLoading();reject(error);//请求失败},complete: function () {wx.hideLoading();// complete}})})},post(url, data) {wx.showLoading({title: '加载中',})return new Promise((resolve, reject) => {wx.request({url: url,data: data,method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECTheader: {'X-Bmob-Application-Id': bmobConfig.applicationId,'X-Bmob-REST-API-Key': bmobConfig.restApiKey,'Content-Type': 'application/json'}, // 设置请求的 headersuccess: function (res) {// successwx.hideLoading();resolve(res.data);},fail: function (error) {// failwx.hideLoading();reject(error);},complete: function () {// completewx.hideLoading();}})})}
}export default net;//暴露出来供其他文件引用
使用方法
- 全局配置请求方式,避免每次import
// src/main.js
import Vue from 'vue';
import App from '@/App';
import MpvueRouterPatch from 'mpvue-router-patch';
import net from '@/utils/net';//导入封装好的netimport shareConfig from '@/config/share';Vue.prototype.$net=net;//微信小程序网络请求的配置Vue.config.productionTip = false
Vue.use(MpvueRouterPatch)const app = new Vue({...App
})
app.$mount()export default {//省略coding
}
- 发送请求实例,第一步已经全局配置了net,使用时直接用this.$net即可使用net的方法(get/post)
// src/pages/home/index.vue
<template>
<!--省略coding-->
</template>
<script>
export default {
data() {return {}bannerList:[],navList:[],newsitems:[],about:"",applay:false, }
},
onLoad () {this.getData();
},
methods:{async getData(){//注意方法名之前一定要加上异步asyncthis.bannerList=[];let bannerList = await this.$net.get(this.$apis.bannerList,{});let newsitems = await this.$net.get(this.$apis.article,{});//请求数据前面要加上await,是与async配套使用let aboutus = await this.$net.get(this.$apis.aboutus,{});let isApplay = await this.$net.get(this.$apis.datadict+'/kMiCYYYg',{});// console.log(isApplay);if(isApplay.remark1=='1'){this.applay = true;}this.newsitems = newsitems.results;// this.bannerList = bannerList.results;bannerList.results.forEach(el => {if(el.is_open==1){this.bannerList.push(el);}});this.about = aboutus.results[1].desc;// console.log(aboutus)},
}
</script>
<style>
/*
省略样式coding
**/
</style>
总结
这次对微信数据请求的封装过程中学习了一下Promise,使得代码更简洁了。踩了一些坑:比如说async一定要与await配套使用,数据请求前要加上异步async。
这里贴一下Promise的技术贴以留后用:
- 大白话讲解Promise
- 阮一峰ES6-Promise对象
mpvue学习笔记-之微信数据请求封装相关推荐
- SwiftUI学习笔记之异步数据请求
SwiftUI学习笔记之异步数据请求 方法一 方法描述: 结合使用 ObservableObject @Published @ObservedObject ObservableObject 定义自己的 ...
- 微信小程序开发:学习笔记[9]——本地数据缓存
微信小程序开发:学习笔记[9]--本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...
- 【学习笔记】大数据技术之Scala(下)
[学习笔记]大数据技术之Scala(上) 大数据技术之Scala 第 6 章 面向对象 6.1 Scala 包 6.1.1 包的命名 6.1.2 包说明(包语句) 6.1.3 包对象 6.1.4 导包 ...
- oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...
天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...
- Vue学习笔记入门篇——数据及DOM
本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...
- vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient
概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...
- HALCON 21.11:深度学习笔记---Data(数据)(3)
HALCON 21.11:深度学习笔记---Data(数据)(3) HALCON 21.11.0.0中,实现了深度学习方法.其中,关于术语"数据"的介绍如下: 术语"数据 ...
- CCC3.0学习笔记_证书数据
CCC3.0学习笔记_证书数据 系列文章目录 文章目录 系列文章目录 前言 1. [A] - SE Root CA Certificate 2. [B] - SE Root Certificate 3 ...
- oracle查询一列汇总,【学习笔记】Oracle数据筛选 查找oracle所有表中的特定列中的某些数据...
天萃荷净 开发DBA反映,根据需求需要查找Oracle数据库中所有表中特定的列中指定的关键词的数据,和数据内容和数量 找出数据库中所有表表中REMARK列中含有WN.wind.wlr中表名和数量 de ...
- Python3 爬虫学习笔记 C10【数据储存系列 — MySQL】
Python3 爬虫学习笔记第十章 -- [数据储存系列 - MySQL] 文章目录 [10.1]MySQL 基本操作语句 数据库操作 表操作 表的结构 表的数据 [10.2]Python 连接 My ...
最新文章
- NVIDIA® TensorRT™ supports different data formats
- 【Linux入门到精通系列讲解】shell中的eval命令
- 这人说的有意思,哈 哈
- Java数据结构习题_算法分析
- XCTF-高手进阶区:bug
- linux+有趣的指令,6个有趣的Linux命令(乐趣终端) - 第二部分
- Linux导出history命令到本地
- 跨境电商shopify独立站如何引流量
- 经纬度坐标转换成px_经纬度坐标转像素坐标
- js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global)...
- MAC 青花瓷(Charles)爪机HTTPS 抓包
- 洛谷1498-谢尔宾斯基三角形-python-(递归)
- R语言|使用RGL包构建3D 图形(一)
- U盘快捷方程病毒 iexplore.vbs
- 腾讯互娱推出 PGOS 提供 Serverless 游戏上云
- Java jdt 编辑_java – 如何使用JDT以编程方式重命名方法
- 苹果你深深的伤害了我,还不让我说
- Qt-利用fmod库显示声音波形
- VBA程序升级,vba在线更新
- Linux系统如何下载CityScape/KITTI-STEP数据集
热门文章
- python创建员工_Python综合练习之创建员工信息表
- 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能
- gbdt 和random forest 效果非常好的思考!
- RNA_seq(1)植物转录组实战(上)之salmon进行索引建立和转录组定量
- MATLAB dsolve 函数求解偏微分方程一例
- 双屏幕切换成单屏,软件不显示的问题与解决方法(总结全网)
- java 男女 相邻交换 队形_(Java实现) 洛谷 P1091合唱队形
- linux7重启network,mmp的 rhel7 network重启一直失败,求原因!!!
- PHP MD5 SHA1 比较 漏洞绕过
- day14 匿名函数