微信小程序学习笔记-实战
学习视频:
技术选型
小程序第三方框架
- 腾讯 wepy 类似 vue
- 美团 mpvue 类似 vue
- 京东 taro 类似 react
- 滴滴 chameleon
- uni-app 类似 vue
- 原生框架 mina
目录结构
styles 公共样式 components 组件 lib 第三方库 utils 工具库 request 接口请求
网络请求
wx.request({ url: '', data: {}, header: { 'content-type': 'application/json' }, method: 'GET', dataType: 'json', responseType: 'text', success: (result) => {}, fail: () => {}, complete: () => {}, });
请求接口域名问题
- 开发环境可以勾选【不校验合法域名】
- 生产环境需要配置【服务器域名】
请求函数封装
request.js
/** 封装请求函数 返回一个Promise对象 ref: https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html */ // 同时发送请求的数量 let requestCount = 0; export function request({ url, data = null, method = 'GET' }) { return new Promise((resolve, reject) => { wx.request({ url: url, data: data, method: method, // 请求成功 success(res) { console.log(url); console.log(res.data); resolve(res.data); }, // 请求失败 fail(err) { reject(err); }, // 请求结束 complete() { requestCount--; if (requestCount <= 0) { // 停止当前页面下拉刷新 wx.stopPullDownRefresh(); } }, }); }); }
默认宽高:
swiper 100% * 150px image 320px * 240px
image
swiper 标签高度变成和图片高一样
less 原样输出
width: ~'calc(100vh - 90rpx)';
数据缓存
web 和小程序中本地存储区别
// 1、写代码方式不一样 web: localStrorage.setItem(key, data); localStrorage.getItem(key) 小程序: wx.setStorageSync(key, data); wx.getStorageSync(key); // 2、存入时类型转换 web: 先转为字符串再存 小程序:原类型存储
小程序支持 ES7 async await 语法
引入扩展
const regeneratorRuntime = require('../libs/regeneratorRuntime.js');
列表
监听滚动条触底事件,实现翻页
// 页面上拉触底事件的处理函数 onReachBottom (){}
开启下拉刷新
"enablePullDownRefresh": true, "backgroundTextStyle": "dark"
// 监听用户下拉动作 onPullDownRefresh(){ // 停止当前页面下拉刷新 wx.stopPullDownRefresh() }
自定义 request
// 同时发送请求的数量 let requestCount = 0; function request(url, data = null) { requestCount++; // 全局添加加载提示 wx.showLoading({ title: '加载中', mask: true, }); return new Promise((resolve, reject) => { wx.request({ url: BASE_URL + url, //仅为示例,并非真实的接口地址 data: data, method: 'POST', header: { 'content-type': 'application/json', // 默认值 }, success(res) { resolve(res.data); }, fail(err) { reject(err); }, complete() { requestCount--; if (requestCount === 0) { wx.hideLoading(); } }, }); }); } export default request;
iPhone 部分手机不识别 webp 格式
大图预览
wx.previewImage();
超出隐藏
display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
富文本显示
<rich-text nodes="{{content}}"><rich-text></rich-text></rich-text>
底部栏
position: fixed;
隐藏 button
.parent { position: relative; .children { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; } }
css3 filter 滤镜效果
// 高斯模糊 filter: blur(510rpx);
获取收获地址
wx.chooseAddress({ success: (result) => { console.log(result); }, });
授权情况检查
wx.getSetting scope.address true 可以获取收货地址 undefined 可以获取收货地址 false 用户主动拒绝,需要引导用户打开授权设置页面 wx.openSetting()
[].every();
页面栈
// onShow不像onLoad一样有形参options onShow(){ // 页面栈数组 let pages = getCurrentPages(); // 当前页面 let currentPage = pages[pages.length - 1]; // 当前页面的参数 currentPage.options }
防抖和节流 定时器
防抖: 用于输入框,防止重复请求
let Timer = null; function foo() { clearTimeout(Timer); Timer = setTimeout(() => { request(); }, 1000); } foo(); foo();
节流:用于页面下拉和上拉
wx:if v-if hidden v-show
选择图片
wx: chooseImage();
获取用户信息
<button open-type="getUserInfo" bindgetuserinfo="handleGetUserInfo"> 获取用户信息 </button>
handleGetUserInfo(e) { // 获取用户信息,需用户确认 wx.getUserProfile({ desc: '用于完善会员资料', // 声明用途 success: (res) => { this.setData({ userInfo: res.userInfo, hasUserInfo: true }) } }) },
使用 iconfont
https://www.iconfont.cn/
将选中的图表添加至项目
推荐 font class 格式
打开文件地址,复制内容到小程序项目中,修改后缀为wxss
文本溢出隐藏
// 单行文本溢出隐藏显示省略号,作用域块级元素 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; // 多行文本溢出隐藏显示省略号 overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; // 设置纵向对齐 -webkit-line-clamp: 2; // 设置多行行数