uniapp编译成微信小程序中遇到的兼容性问题

2024-01-22 06:40

本文主要是介绍uniapp编译成微信小程序中遇到的兼容性问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.小程序报错报类似Bad value with message的错误
    • 2.如果后端的接口数据返回null,则微信小程序会渲染成null ;h5端则不会;
    • 3.全局挂在的属性,在模板中不可用;
    • 4.微信小程序报错Converting circular structure to JSON
    • 5.uview不能使用@tap
    • 6.包体积瘦身,单包不能超过2M,总包不能超过20M
    • 7.@tap无法动态传参
    • 8. 无法使用v-on=" l i s t e n e r s " 和 v − b i n d = " listeners"和v-bind=" listeners"vbind="attrs"
    • 9.uniapp动态插槽,小程序不支持动态插槽报错
    • 10 vue3中使用createSelectorQuery.in(this)获取元素的时候报错TypeError: Cannot read property '__route__' of undefined的解决方法
    • 10.uniapp编译到微信小程序 的时候,会多一层以组件命名的标签
    • 11. computed在微信小程序端不管是页面还是组件,默认会自动执行一次,而其它端则无此问题
    • 12在ios真机中如果使用scrollView组件后,子元素如果使用fixed定位的话,此时fixed将会将对于scrollView定位;


1.小程序报错报类似Bad value with message的错误

模板里面如果存在这样的语法,则会报错Bad value with message;然而||''和||[]则不会报错;如下所示;

<u-cell-item :arrow="false" title="报废年限">{{data.scrapYear||{}}}</u-cell-item>

2.如果后端的接口数据返回null,则微信小程序会渲染成null ;h5端则不会;

解决方法:建议java后端加个拦截器统一处理下null

3.全局挂在的属性,在模板中不可用;

建议使用计算属性来访问全局变量;

Vue.prototype.$file = fileUrl

4.微信小程序报错Converting circular structure to JSON

Converting circular structure to JSON    --> starting at object with constructor 'Object'    --- property 'order' closes the circle

原因:排查循环依赖的问题,如下注释的代码即为循环依赖

this.detailData = data.order;//循环引用
// this.detailData.order = data.order;//原来的:循环引用
this.detailData.order =JSON.parse(JSON.stringify(data.order)) ;//修复后的,使用单层深拷贝解决循环引用问题

5.uview不能使用@tap

在这里插入图片描述

6.包体积瘦身,单包不能超过2M,总包不能超过20M

  • uni.scss文件一定不能引用过多的样式,否则所有编译成wxss都将会存在引入的样式,最突出的体积大问题
  • @/static下的静态文件,如果只是分包下用到,也可以放到分包下的static
  • 按照业务分包

7.@tap无法动态传参

如下所示,方法toWorkOrderDetail接受不到order的入参

        <viewclass="card"v-for="order inlist":key="order.id"@tap="toWorkOrderDetail(order)"></view>

解决如下

<view class="card" v-for="order in list" :key="order.id"@click="toWorkOrderDetail($event)" :data-row="order">
</view>
	toWorkOrderDetail(e) {const {id} = e.currentTarget.dataset.rowuni.navigateTo({url: `/******/detail?point_id=${pointId}`,});},

8. 无法使用v-on=“ l i s t e n e r s " 和 v − b i n d = " listeners"和v-bind=" listeners"vbind="attrs”

这个是通病,截至2023年uniapp都不支持该语法,切记封装组件的时候不要使用该语法
鸡肋的是我当时热更新没有问题,第二次运行的时候就提示不支持了,然后回去重头写组件

9.uniapp动态插槽,小程序不支持动态插槽报错

子组件

<template>
<!-- #ifdef MP-WEIXIN -->
<!-- 小程序没有作用域插槽 -->
<slot name="{{item.slot}}" ></slot>
<!-- #ifndef MP-WEIXIN -->
<slot :name="item.slot" :formItem="item"></slot>
<!-- #endif -->
</template>

父组件
切记小程序不要用template,否则渲染不出来

<!-- #ifdef MP-WEIXIN --><view v-slot:deviceNo><u-icon name="scan" size="38" @click="scan"></u-icon></view><!-- #endif --><!-- #ifndef MP-WEIXIN --><template v-slot:deviceNo><u-icon name="scan" size="38" @click="scan"></u-icon></template><!-- #endif -->

10 vue3中使用createSelectorQuery.in(this)获取元素的时候报错TypeError: Cannot read property ‘route’ of undefined的解决方法

此问题只有小程序才会出现,h5不会出现


/*** 获取dom节点的宽高位置信息* 示例:uni.$yw.getDomClientRect('.yw-fixed-button')* @param {选择器字符串} select * @returns */
export function getDomClientRect(select) {return new Promise((resolve, reject) => {const instance = getCurrentInstance()uni.createSelectorQuery().in(instance).select(select).boundingClientRect(res => {resolve(res)}).exec()})
}

10.uniapp编译到微信小程序 的时候,会多一层以组件命名的标签

这是因为自定义组件渲染差异导致,如下为官网说明
在这里插入图片描述
可以配置virtualHost来配置

export default {options: {virtualHost: true,},
}

11. computed在微信小程序端不管是页面还是组件,默认会自动执行一次,而其它端则无此问题

切记多端兼容的时候不要在computed执行数组的push等操作,否则数据会重复;

    /**卡片数组 */const carList = computed(() => {const _tmp = [{ label: '品牌', key: 'modelName', },{ label: '所在仓库', key: 'stashStr' },]/**如果是不是采购的话就加上库存,同时设最大值 *//**注意事项:一定要加上type.value 的判断,不然微信小程序会先会执行2遍,这样就push进去了 *//**因为小程序computed会自动执行一次,然后onLoad里面给type赋值的时候又执行一次,这个是uniapp这个框架一直没有解决的编译BUG */if (type.value && (Number(type.value) != ENUMS.GOODS.APPLY_TYPE.BUY.VALUE)) {_tmp.push({ label: '库存', key: 'inventoryNumber' })maxKey.value = 'inventoryNumber'}return _tmp})

12在ios真机中如果使用scrollView组件后,子元素如果使用fixed定位的话,此时fixed将会将对于scrollView定位;

解决方法:
是因为在ios中会自动加上 -webkit-overflow-scrolling:touch,可在scrollView中的calss中取消掉它

 .uni-scroll-view {-webkit-overflow-scrolling: auto;
}

这篇关于uniapp编译成微信小程序中遇到的兼容性问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/632149

相关文章

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2