- 2023-07-07
- require动态拼接路径预览和体验版报错
require动态拼接路径预览和体验版报错,改成+拼接也一样,正式发布会有问题吗? [图片]
2022-01-19 - 详解小程序如何引入使用computed计算属性
对于使用过前端框架的很多人来写小程序,会因为小程序官方并没自带computed计算属性而造成了一定程度的困扰,为了解决这个困扰,下面我将介绍如何引入官方推荐的自定义组件扩展computed PS:第三点以及文尾的内容非常重要!!一定要注意!!! 进入你的小程序后(小程序根目录需要命名为全英文,中文在后续安装中也会有介绍怎么办),进入微信开发者工具,打开下方的终端,并点击+号新建终端 [图片] 然后检查左边目录,如果根目录是如下图分为cloudfunctions(云函数目录)和miniprogram(主要代码部分),那么需在终端输入[代码]cd miniprogram[代码]先进入miniprogram目录,再进行后续导入包 [图片] 如果左边目录是如下图的形式那么不需要输入[代码]cd miniprogram[代码] [图片] 然后在终端输入按顺序输入以下三条指令: (1)npm init -y(如果你的小程序根目录不是全英文,那么输入npm init,然后输入任意一个英文名称,一直回车即可) (2)npm install --production (3)npm install --save miniprogram-computed (4)点击微信开发者工具上方工具栏的 工具 -> 构建npm -> 构建完成点击确定即可 然后在需要使用计算属性computed页面的JS部分 先在JS部分最开始加入以下代码 [代码]const computedBehavior = require("miniprogram-computed").behavior;[代码] 然后在Pages中加入 [代码]behaviors: [computedBehavior][代码] 如下图: [代码]const computedBehavior = require("miniprogram-computed").behavior; Pages({ behaviors: [computedBehavior], data: { a: 1, b: 1, }, computed: { sum(data) { // 注意: computed 函数中不能访问 this ,只有 data 对象可供访问 // 这个函数的返回值会被设置到 this.data.sum 字段中 return data.a + data.b; }, }, methods: { onTap() { this.setData({ a: this.data.b, b: this.data.a + this.data.b, }); }, }, }); [代码] 温馨提示:需要通过this.setData改变值,computed的计算属性的值才会因为对应的值发生改变而改变 例如上述代码,onTap()方法中如果改变a和b的值是如下: [代码]a = this.data.b; b = this.data.a+ this.data.b; [代码] 而不是 [代码]this.setData({ a: this.data.b, b: this.data.a + this.data.b, }); [代码] 那么computed中的sum属性是不会发生任何改变的。 道理很简单,对已有的 setData 进行二次封装,在每次 setData 的时候计算出 computed 里各字段的值,然后设到 data 中,以达到计算属性的效果,不用setData对a和b进行更新,那么计算属性sum便接收不到此更改。 文章到此结束啦,觉得有帮助的小伙伴可以点个赞~ 如果按照上述步骤仍无法正常使用computed的欢迎在评论区提出
2021-11-11 - 什么样才算是热启动?
文档中说道: 热启动:假如用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需将后台态的小程序切换到前台,这个过程就是热启动; 开发中遇到的场景: 我第一次从聊天卡片打开小程序(冷启动), 然后点右上角的圆圈关闭小程序,然后马上从聊天卡片进入小程序(热启动),<--情况1 我按home键,切出微信,然后我在从后台的进程中进入小程序(热启动),<--情况2 代码如下 [代码]const app = getApp()[代码] [代码]let lock = [代码][代码]true[代码][代码];[代码] [代码]Page({[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]lock: [代码][代码]true[代码][代码] [代码][代码]},[代码][代码] [代码][代码]onShow () {[代码][代码] [代码][代码]console.log(lock);[代码][代码] [代码][代码]if[代码] [代码](lock) {[代码][代码] [代码][代码]lock = [代码][代码]false[代码][代码];[代码][代码] [代码][代码]wx.showModal({[代码][代码] [代码][代码]title: [代码][代码]'xxx'[代码][代码],[代码][代码] [代码][代码]content: [代码][代码]'xxx'[代码][代码],[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]},[代码][代码] [代码][代码]onShareAppMessage () {[代码][代码] [代码][代码]return[代码] [代码]{[代码][代码] [代码][代码]title: [代码][代码]'xxxx'[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码]})[代码]情况1的时候 输出 true, 情况2的时候输出false。这两种情况有什么差异吗?
2019-08-08 - webgl和2d的canvas同时使用在各个平台上不一致问题
一个webgl的Canvas绘制蓝色,一个2d的Canvas绘制绿色,在开发工具,Android真机和iOS真机表现不一致; 图一为开发工具效果,图二为Android效果,同层渲染z-index无效,webgl的canvas高于2d,图三为iOS效果,webgl无内容。 [图片][图片][图片]
2020-06-04 - [填坑手册]小程序web-view组件实战与踩坑
[图片] 首先,根据官网文档可以知道 只有非个人 的小程序才可以使用web-view组件,如果你的个人开发者,可以跳过这篇文章。 [图片] 一、使用web-view以及它的好处 1、己方账号(第三方)与小程序openId/UnionId的关联绑定,实现免登陆 比如你是某门户网站S,你要识别自己小程序上的用户与网站用户的关系,你可以通过三种方法绑定关系,公众号,小程序源生,小程序web-view内嵌跳转三种方法 2、内嵌H5的富文本,减少重复开发 比如你是门户网站,社区,以往有大量的新闻和帖子,里面带了各种css样式的富文本,小程序源生是无法直接读取的,需要大量转化,这时候直接内嵌这些H5新闻,大大降低开发成本 3、热更新,减少发布审核 某些需要经常更新的内容、公告、活动页,内嵌H5可以减少频繁提交小程序审核 二、小程序功能赋权 为H5提供各种小程序才有的功能,比如录音,扫一扫等。 注意事项 多场景判断,建议使用官方API: wx.miniProgram.getEnv H5唤醒一些小程序API有一定的延时,0.3~1秒 请调用小程序专用的JSSDK,同一个jssdk,但是webview的功能收到限制,和之前微信打开H5有所不同 小程序自动获取加载H5的title H5中iframe的url必须也是业务域名 web-view一定是撑满全屏的,自定义顶部菜单,悬浮的都没用 三、小程序和H5之前的互相通讯 1、 从小程序 ==>> h5 小程序控制H5,可以直接用src路径传参的形式,比如 [代码]<!-- 小程序端 HTML --> <web-view src="//URL?a=param1&b=param2"></web-view> [代码] 避免在链接中带有中文字符,在 iOS 中会有打开白屏的问题,建议加一下 encodeURIComponent。 2、 从 H5 ==>> 小程序 [图片] 这里我们知道bindmessage是小程序用来监听H5的推送的内容,但是这里不大不小的坑!就是它的三个出发场景: 小程序后退:使用接口名 wx.miniProgram.navigateTo,wx.miniProgram.navigateBack,wx.miniProgram.switchTab 等切换小程序页面/场景的API时候都会出发 分享:这个就是当你点分享小程序的时候,会接受到H5之前发送的postMessage 组件销毁,web-view组件销毁,类似 wx.miniProgram.redirectTo 都会触发。 [代码]<!-- 小程序端 HTML --> <web-view bindmessage="handleGetMessage" src="{{openUrl}}"></web-view> [代码] [代码]// 小程序端 JS --> Page({ /** * 页面的初始数据 */ data: { openUrl: "", }, /** * 获取请求数据 */ handleGetMessage: function (e) { console.log(e.detail.data); } }, }) [代码] [代码]<!-- h5端 HTML和JS --> <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script> <script> wx.miniProgram.postMessage({ data: { link: "//test.com", title: "一起学习,一起进步" } }); //wx.miniProgram.redirectTo({ // url:"/pages/inner/index?source=123" //}) wx.miniProgram.navigateBack({delta: 1}) </script> [代码] 注意事项 那些H5控制小程序的跳转路径必须是“/”开头,如 “/pages/xxx/xxx”,且路径必须在app.json里有,地址错误的话,有时不报错。 postMessage的json必须是data开始,不然接收不到数据。 [图片] 四、bindmessage接收到消息有3个重要特性(重点) 接收可以是H5之前几分钟前发送postMessage,不一定是即刻发出的。 之前发出的 postMessage的DATA信息会累加,当触发bindmessage接收的时候是一个数组。 [图片] 当bindmessage 再次 接收到数据,之前发送的数据不会被清空,将累加一起返回,获取时要判断好数组的角标 [图片] 五、Tips 1、在IDE工具中如何调试H5 [图片] 可以在 web-view 组件上通过右键 - 调试,打开 web-view 组件的调试。 2、内嵌H5缓存问题 web-view加载的H5具有很重的缓存,如果需要调试,可以通过在url后面加时间戳的方式解决。 3、小程序关闭,H5背景音乐仍然在播放问题 小程序已经关闭,但是H5自带的背景音乐仍然在手机后台播放的问题。这里可以利用一个属性: visibilitychange:页面可见性状态 简单的说,浏览器标签页被隐藏或显示的时候会触发visibilitychange事件。 [代码]var statusBeforeHide = true; //初始化页面的状态 var music = document.getElementById("xxx"); // 更改音乐播放状态 function setChangeMusic() { if (document[hiddenProperty]) { // 页面隐藏 if (statusBeforeHide) { music.pause(); // 暂停 } } else { // 页面显示 if (statusBeforeHide) { music.play() //如果statusBeforeHide是true, 继续播放 } } } let hiddenProperty = ('hidden' in document) ? 'hidden' : ('webkitHidden' in document) ? 'webkitHidden' : ('mozHidden' in document) ? 'mozHidden' : null; if (hiddenProperty) { let visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange'); let onVisibilityChange = () => { //console.log('visibilityChange'); setChangeMusic(); }; document.addEventListener(visibilityChangeEvent, onVisibilityChange); } else { console.log("不支持这个api"); } [代码] 总结,web-view还是非常实用的组件,且用且珍惜~ 往期回顾: 小程序自定义头部导航栏“完美”解决方案 小程序Canvas生成海报(一) 小程序新版订阅消息+云开发实战与跳坑
2021-09-13