小程序介绍

目录结构

app.js

//程序的入口
App({//小程序的生命周期函数onLaunch: function () {this.globalData.sysinfo = wx.getSystemInfoSync()},//可以定义一些全局的函数getVersion: function () { //获取微信版本号return this.globalData.sysinfo["version"]},//也可以定义一些全局变量,通过app.globalData来调用globalData: {        }
})

单个页面的目录结构

.wxml : 用来描述当前这个页面的结构,同时提供了类似于Vue中指令的语法
.js : 用来定义当前页面中用到的数据、交互逻辑和响应用户的操作
.json : 用来定义当前页面的个性化配置,例如,为每个页面单独配置顶部颜色、是否允许下拉刷新等
.wxss : 用来定义样式

注意:在小程序页面的.js文件当中,即使我们没有任何的逻辑要写,也要在js文件中写一个页面初始化的Page({})函数

生命周期

生命周期:是指一个对象从创建 -> 运行 -> 销毁的整个阶段,强调的是一个时间段
小程序应用的生命周期:

App({//小程序初始化完成时,执行此函数,全局只触发一次。可以做一些初始化的工作。onLaunch: function(options) { },//小程序启动,或从后台进入前台显示时触发。onShow : function(options) { },//小程序从前台进入后台时触发。onHide : function() { }
})

小程序页面的生命周期:

Page({//监听页面加载,一个页面只调用1次onLoad : function(options) { },//监听页面显示onShow : function() { },//监听页面初次渲染完成,一个页面只调用1次onReady : function() { },//监听页面隐藏onHide: function() { },//监听页面卸载,一个页面只调用1次onUnload: function() { }
})

Page中除了生命周期函数外,自定义的函数和变量,还有一些事件的监听都是写在这里

Page({//监听页面滚动onPageScroll: function() {// Do something when page scroll},//自定义函数viewTap: function() {this.setData({hi: 'nizhenhao.'}, function() {// this is setData callback})},//自定义的变量data: {hi: 'nihao'}
})

一、微信小程序的关键配置

app.json

{"pages": ["pages/web/web","pages/all/all","pages/camera/camera","pages/scanCode/scanCode","pages/result/result"],"window": {"backgroundTextStyle": "light","navigationBarBackgroundColor": "#2069d7","navigationBarTitleText": "兵团食用农产品合格证助手","navigationBarTextStyle": "white"},"sitemapLocation": "sitemap.json"
}

pages 数组:配置小程序的页面路径(第一个路径为默认访问的路径)
window 对象:用于设置小程序的状态栏、导航条、标题、窗口背景色

开发配置
服务器域名请在 「小程序后台 - 开发 - 开发设置 - 服务器域名」 中进行配置。

注意:
域名只支持 https (wx.request、wx.uploadFile、wx.downloadFile) 和 wss (wx.connectSocket) 协议;
域名不能使用 IP 地址(小程序的局域网 IP 除外)或 localhost;
可以配置端口,如 https://gago.com:8080,但是配置后只能向 https://gago.com:8080 发起请求。如果向 https://gago.com等 URL 请求则会失败。
如果不配置端口。如 https://gago.com,那么请求的 URL 中也不能包含端口,甚至是默认的 443 端口也不可以。如果向 https://gago.com:443 请求则会失败。
业务域名是在web-view中加载的h5的地址。

二、小程序与网页间通信

小程序与H5跳转

H5 ==> 小程序

1、在H5页面引入JSSDK
首先需要在H5页面中引入JSSDK,它可以让H5页面的js文件执行微信小程序的部分API命令。
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
2、使用wx API路由跳转
url就是在小程序里app.json的pages里面写的路由,需要传的参数就像get请求那样拼接在后面就行。

window.wx.miniProgram.navigateTo({url: `../all/all?${queryString.stringify(params)}`,});

接收参数:在小程序的生命周期函数onLoad里接收一个options
onLoad: function (options) {}

小程序 ==> H5

wx.navigateBack({delta: 2,
});
wx.navigateTo({url: `../web/web`,
})

navigateBack:顾名思义就是返回,delta就是路由回退的数量
navigateTo:这个就是跳转到制定到路由,这里是返回到的地方。
使用navigateTo,会重新渲染H5的页面,也就是会经过路由重定向到登陆页的过程,所以H5中要做token的保存和验证。

小程序向H5传输数据

每个微信小程序需要事先设置通讯域名(上面的服务器域名),小程序只可以跟指定的域名进行网络通信。包括普通 HTTPS 请求(wx.request)、上传文件(wx.uploadFile)、下载文件(wx.downloadFile) 和 WebSocket 通信(wx.connectSocket)

request

文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html

wx.request({url: 'url',method: 'POST',data: {xxx: xxx...},header: {'content-type': 'application/json', // 默认值},success(res) {that.printSuccess(app.globalData.printData.certificateCode);}})

三、小程序与打印机间通信

  1. 搜索蓝牙、获取蓝牙列表、停止搜索
  2. 建立连接,获取deviceId
  3. 连接成功后获取蓝牙设备服务(serviceId)
  4. 根据deviceId、deviceId 来获取设备的读写特征。(notify、write、read)
  5. 向低功耗蓝牙设备特征值(write)中写入二进制数据

在小程序中,要使用蓝牙能力(Beacon 除外)必须首先调用 wx.openBluetoothAdapter 初始化蓝牙适配器模块,其生效周期为调用 wx.openBluetoothAdapter 至调用 wx.closeBluetoothAdapter 或小程序被销毁为止。

每个蓝牙设备都有唯一的 deviceId 来标识。建立蓝牙连接需要的参数就是这个deviceId。需要注意,在不同设备上扫描获取到的 deviceId 可能是变化的。因此 deviceId 不能写死在代码中。

向低功耗蓝牙设备特征值(write)中写入二进制数据

建议每次写入的buffer不超过20字节,超过会有写入错误的风险
所以需要将数据分包发送

Send: function (buff) { //分包发送var that = thisvar currentTime = that.data.currentTimevar loopTime = that.data.looptime // parseInt(buff.length / time);var lastData = that.data.lastData // parseInt(buff.length % time);var onTimeData = that.data.oneTimeData //每次数据大小:20字节var printNum = that.data.printSize //printNumbervar currentPrint = that.data.currentPrintvar bufvar dataViewif (currentTime < loopTime) {buf = new ArrayBuffer(onTimeData)dataView = new DataView(buf)for (var i = 0; i < onTimeData; ++i) {dataView.setUint8(i, buff[(currentTime - 1) * onTimeData + i])}} else {buf = new ArrayBuffer(lastData)dataView = new DataView(buf)for (var i = 0; i < lastData; ++i) {dataView.setUint8(i, buff[(currentTime - 1) * onTimeData + i])}}wx.writeBLECharacteristicValue({deviceId: app.BLEInformation.deviceId,serviceId: app.BLEInformation.writeServiceId,characteristicId: app.BLEInformation.writeCharaterId,value: buf,success: function (res) {if (currentPrint == printNum) {wx.showToast({title: '打印成功',})}},fail: function (e) {wx.showToast({title: '打印失败',icon: 'none',})},complete: function () {currentTime++//分包发送结束if (currentTime <= loopTime) {that.setData({currentTime: currentTime})that.Send(buff)} else {//是否打印多张if (currentPrint == printNum) {that.setData({looptime: 0,lastData: 0,currentTime: 1,isLabelSend: false,currentPrint: 1})that.recordPrintNum(printNum);//将打印数量提交到后台} else {currentPrint++that.setData({currentPrint: currentPrint,currentTime: 1,})that.Send(buff)}}}})},

四、小程序真机调试

小程序的控制台:

真机调试的控制台:

手机上打开控制台:

五、小程序的更新与发版

如果需要测试环境,则在微信小程序官网,在版本管理->开发版本,选择你要用做测试的版本,将其设为体验版。

注意:
微信的 web-view 组件就是一个嵌在小程序里的浏览器,它在缓存上并没有完全遵照上述的规则,也即它的缓存并不能及时得到清理。想必下面的操作大家都有尝试过:

· 手动退出小程序,再次进入;
· 将微信从后台退出再打开并重新进入小程序;
· 修改 Nginx 关于 Cache-Control 的配置;
· 用 debugx5.qq.com 手动清除安卓微信浏览器缓存;
· iOS 利用微信自带清楚缓存功能。

无法及时刷新缓存会导致发布了最新的页面,而小程序里仍然是以前的页面,从而会带来许多问题,如前后端的数据不一致,新的特性无法及时起作用,修改的问题没有得到解决等等。这里需要说明一下:web-view 在过一段时间(时间不定,一天或者几小时,无明显规律)是可以进行缓存刷新的。

微信小程序笔记、小程序打印相关推荐

  1. springboot+微信小程序“微印象”在线打印预约系统的设计与实现毕业设计源码061642

    摘  要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微印象在线打印预约小程序被用户普遍使用,为方 ...

  2. 基于微信小程序的校园自助打印系统小程序

    文末联系获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:ecl ...

  3. 微信小程序学习笔记 ( 小程序主体学习 二 逻辑层 app.js 扩展 高级食用方法)

    目录结构 上图是我建立的的微信小程序的目录结构 主体学习 逻辑层(App Service) 小程序开发框架的逻辑层由 JavaScript 编写.    逻辑层将数据进行处理后发送给视图层,同时接受视 ...

  4. 微信小程序笔记(三)Wepy使用记录—Stylus预编译基本使用

    Wepy使用记录-Stylus预编译基本使用 坏境搭建请前往wepy框架官网 淘宝 NPM 镜像 wepy新建wpy初始化模板参考 创建空项目   使用wepy init empty 项目名称命令来创 ...

  5. 【Cxinny】微信小程序笔记

    事件绑定 bindtap:类似click bindinput:文本框的输入事件 bindchange:状态改变时触发 事件对象的属性列表event target是触发该事件的源头组件,而current ...

  6. 微信小程序笔记(包含node.js简介)

    一.小程序基础知识 1. 小程序简介 小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 2. CSS样式 https://www.w3school.c ...

  7. wx小程序笔记(2)

    wx小程序笔记 第三章:常用组件 第一节:scroll-view组件 view: scroll-view: 设置横向滚动: 设置竖向滚动: scrolltoupper和scrolltolower事件: ...

  8. uni-app开发小程序,笔记记录6 商品详情页

    学习地址 零基础玩转微信小程序:黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署) uniapp - 黑马优购 笔记地址 知识点 1 数据加 ...

  9. 个人项目-仿微信小打卡小程序

    #1 项目说明 由于受限于微信认证不通过(个人号无法认证),超出了小程序涉及的类目(社交-笔记),因此无法审核通过进行发布,只能体验版使用.为了项目展示,就只能放到博客上面来了. 本项目只是个人学习项 ...

  10. 微信小程序和小游戏自动化测试

    版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 此文章来源于项目官方公众号:"AirtestProject" Airtest Project自动化测试方案除了支 ...

最新文章

  1. flink physical partition
  2. 【华为云实战开发】2.Docker镜像部署怎么玩才酷炫?
  3. iptables详解和snat dnat
  4. Windows读取NXP MiFare Ultralight C类型NFC卡片的信息
  5. 一款超漂亮的简历生成器,金三银四的你一定用得上
  6. IPsec简单实验-IKE协商
  7. Long-tailed Recognition (长尾问题)
  8. Ubuntu、CentOS、macOS测试服务器上传和下载速度
  9. pli测试50题题库_面试人员情商测试50题1
  10. FFmpeg超低延迟视频推流笔记
  11. uni-app 报错:代码使用了scss/sass语言,但未安装相应的编译器插件,请前往插件市场安装该插件
  12. 启动sts后,打开项目报错:NullPointException【已解决】
  13. 计算机下桌面显示不出来,电脑桌面文档不会在右边显示出来怎么办
  14. 05吸收应用:会整理还不够?教你吸收、联想、输出、应用
  15. 数字信号处理——FFT
  16. ubuntu 20.04 安装obs 录屏软件
  17. 估值11亿美元新独角兽诞生,网易有道CEO周枫:宁愿十年挖一口井
  18. 其实真正做了自由职业者之后,才发现赚钱的方式太多了
  19. 提升用户体验 联想企业网盘从速度、数据管理、业务协同三方面入手
  20. MATLAB 制作抖音同款 立体人物文字海报

热门文章

  1. android 字符转double,Android String类型转换为float、double和int的工具类方法
  2. 各类游戏对应服务端架构
  3. Android模仿youtube的拖拽视频效果
  4. [ERROR] Please refer to XXXXXXXXXXX for the individual test result
  5. 曾经,被嫌弃的腾讯股权——读《腾讯传》
  6. python中根号怎么输入_python中根号怎么表示
  7. 学习笔记(12):A110测试-测试课程申请1888
  8. 零基础入门金融风控之贷款违约预测—特征工程
  9. Cisco-EIGRP分析总结
  10. java-练习题-小学算术题