uni-app 小程序开发技巧与踩坑问题汇总(持续更新)

写在最上面:假如开发碰到问题,首先去算卦关文档陌陌兼容就去看陌陌的文档,支付宝也一样,90%的问题都在文档上面写好了,只是没注意到

这篇文档是近日笔者uni-app小程序开发踩坑所遇见的一些问题,并不是入门文档,更多的是一些

开发方法和踩坑问题,在这儿持续更新一篇文档,便捷后续遇到问题查阅,另外好多基础的api或

uni-app 小程序开发技巧与踩坑问题汇总(持续更新)

问题我就不放进来了,直接去看官方文档比看那些文档简单直接的多,这儿附上链接:

uniapp.dcloud.net.cn/

假如文档用的话,麻烦点个赞再走哈~

默认环境为陌陌小程序,好多问题应当是通用的,针对支付宝和H5的问题文章最后面会单独列下来

持续更新中。。。

可以搭配我的另外一篇文档《#Vue基础知识速查指南》快手赞赞宝使用方法,食用更佳~~

1、uni-app是哪些

uni-app是一个使用Vue.js(opensnewwindow)开发所有后端应用的框架。

优点:

同类的还有Tarojs等,个人体验Taro好用一点

2、easycom

只要组件安装在项目的components目录下,并符合components/组件名称/组件名称.vue目录结构。就可以不用引用、注册,直接在页面中使用

DOC:

用处:

3、uni-app如何使用npm库

Vue-cli项目

平常如何用,如今就如何用,es6model形式引用就行npmixxxxx-->importxxxfrom"xxxx"

HbuilderX项目

不能直接使用,须要额外npmixxxx至某文件夹以后,拖进项目根目录才可在文件中通过commonjs或Es6module方法引入

4、踩坑文档&使用心得(他人的文档)5、生命周期:

应用生命周期

1.onLaunch:当uni-app初始化完成时触发(全局只触发一次)

2.onShow:当uni-app启动,或从后台步入前台显示//窃听用户步入小程序

3.onHide:当uni-app从前台步入后台//窃听用户离开小程序

4.onError:当uni-app报错时触发

5.onUniNViewMessage:对nvue页面发送的数据进行窃听

组件生命周期

onLoad(窃听页面加载)onShow(窃听页面显示)onReady(窃听页面初次渲染完成)onHide(窃听页面隐藏)onUnload:窃听页面卸载onResize:窃听窗口规格变化onPullDownRefresh:窃听用户下拉动作,通常用于下拉刷新6、跨组件通信方式

DOC:

触发的风波都是App全局级别的,跨任意组件,页面,nvue,vue等使用时快手赞赞宝使用方法,注意及时销毁风波窃听,例如,页面onLoad里面uni.on注册监听,onUnload里边uni.of注册窃听,onUnload里面uni.on注册窃听,onUnload里面uni.off移除,或则一次性的风波,直接使用uni.$once窃听7、条件编译

DOC:

/* 只在微信环境下执行 */
// #ifdef MP-WEIXIN   
uni.login({
	 xxxxx
});
// #endif
/* 除了微信其他环境下都执行 */
// #ifndef MP-WEIXIN   
uni.login({
	xxxxx
});
// #endif

表格:

值生效条件

VUE3

HBuilderX3.2.0+详情(opensnewwindow)

APP-PLUS

App

APP-PLUS-NVUE或APP-NVUE

Appnvue

H5

H5

MP-WEIXIN

陌陌小程序

MP-ALIPAY

支付宝小程序

MP-BAIDU

百度小程序

MP-TOUTIAO

字节跳动小程序

MP-LARK

飞书小程序

MP-QQ

QQ小程序

MP-KUAISHOU

快手小程序

MP-JD

易迅小程序

MP-360

360小程序

MP

陌陌小程序/支付宝小程序/百度小程序/字节跳动小程序/飞书小程序/QQ小程序/360小程序

QUICKAPP-WEBVIEW

快应用通用(包含联盟、华为)

QUICKAPP-WEBVIEW-UNION

快应用联盟

QUICKAPP-WEBVIEW-HUAWEI

快应用华为

8、全局变量&函数

1、在app.vue文件中配置

组件中使用

const app = getApp();
const gbobalData = app.gbobalData
//...

2、main.js文件,将变量或函数挂载在全局(与Vue配置全局函数方式一样)

如:

  import Vue from 'vue';
  import cloneDeep form '@/public/utils/lodash/cloneDeep.js';
  Vue.prototype.$clone = cloneDeep;

9、分包

因小程序有容积和资源加载限制,各家小程序平台提供了发包形式,优化小程序的下载和启动速率。

demo

       "pages":[],
	// 分包配置
	"subPackages": [
		{
			"root": "pages_tickets",
			"pages": [
				{
					"path": "subpage1/index",
					"style": {
						"navigationBarTitleText": "哈哈哈哈哈哈",
						"enablePullDownRefresh": false,
					}
				},
				{
					"path": "subpage2/index",
					"style": {
						"navigationBarTitleText": "嘻嘻嘻嘻嘻",
						"enablePullDownRefresh": false,
					}
				},
			]
		}
	]

10、uni-popup滚动穿透||小程序任意弹窗滚动穿透处理方案

核心原理是弹窗出现,设置最内层页面高度为可视窗口高度,超出隐藏,弹窗隐藏,高度恢复

最内层父级组件设置属性

overflow,弹窗显示,属性设置为hiddenheight,弹窗显示,属性设置为100vh,100vh表示当前整个屏幕大小data新增属性showPopup,控制款式

class = "page" 
    :style ="{ 
        overflow: showPopup ? 'hidden' : 'visible', 
        height: showPopup ? '100vh' : auto
     }"
 > 
        这是最外层父级组件 
  

pop

11、scroll-view不触发@scroll及@scrolltolower

scroll-view容器必须有一个确定的height(比率的形式也会失效),否则会导致@scroll及@scrolltolower风波难以触发

解决方案:

		computed: {
			scrollH: function () {
				let sys = uni.getSystemInfoSync();
				let winWidth = sys.windowWidth;
				let winrate = 750 / winWidth;
				let winHeight = parseInt(sys.windowHeight * winrate);
				return winHeight;
			}
		},

 

12、复制功能

copyBtn() {
        uni.setClipboardData({
          data: this.copyContent,
          success: function (res) {
            uni.getClipboardData({
              success: function (res) {
                wx.showToast({
                  title: '已复制到剪贴板',
                });
              },
            });
          },
        });
},

参考:blog.csdn.net/qq_37939251…

13、本地图片加载失败

developers.weixin.qq.com/community/d…

14、图片懒加载

ps:关于图片储存问题,用之前尽量用Tinypng压缩一下,超过1k的尽量用网路图,不要放本地,此处有坑。。。。

lazy-load属性

注意:图片懒加载只针对page与scroll-view下的image有效。

<image lazy-load :src="item.pic" />

按文档所述,小程序会提早加载上下三屏的图片,造成难以感知懒加载的存在。虽然image组件还有个如下隐藏的属性,官方文档上面没有标下来:

属性名类型默认值说明

lazy-load-margin

Number

图片懒加载屏数阀值,在正式步入设置的屏数才开始加载

为了能更清楚的确认懒加载是否生效,我们通过将lazy-load-margin设置为0,再看疗效,代码如下:

:lazy-load-margin="0" :src="item.pic" />

通过设置lazy-load-margin,并结合陌陌开发者工具调试器中的Network,我们可以很清楚的观察到懒加载的疗效了。另外,可以通过lazy-load-margin灵活设置懒加载屏数阀值。

参考:…

15、uni-app使用eventbus

16、uni-pop弹不下来

juejin.cn/post/711780…

省流:陌陌小程序(两个方式都可以解决)

删掉uni-translate包重新导出(不推荐,由于很麻烦)更改陌陌小程序开发者工具基础库,随意切一下即可(✨✨便捷好用)

支付宝小程序

删掉uni-translate包重新导出(不推荐,由于很麻烦)删掉uni-popup包重新导出()17、富文本相关支付宝:

支付宝不支持直接显示html内容,须要用到第三方库将html格式转化

详见:github.com/ant-mini-pr…;

文档:opendocs.alipay.com/mini/compon…