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

这篇具有很好参考价值的文章主要介绍了uniapp编译成微信小程序中遇到的兼容性问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

uniapp兼容小程序,微信小程序,uni-app,小程序

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

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

7.@tap无法动态传参

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

        <view
              class="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.row
				uni.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"和v−bind="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编译到微信小程序 的时候,会多一层以组件命名的标签

这是因为自定义组件渲染差异导致,如下为官网说明
uniapp兼容小程序,微信小程序,uni-app,小程序
可以配置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中取消掉它文章来源地址https://www.toymoban.com/news/detail-725375.html

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

到了这里,关于uniapp编译成微信小程序中遇到的兼容性问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp开发笔记----发布成微信小程序体验版本

    之前有用过微信小程序原生开发,后来面试时候都会问uniapp,最近有空有研究下uniapp,项目0-1开发流程笔记,主要内容如下,中间可能会有修改。 1. 创建项目 文件-新建-项目,选一个你想要的模版或者不选 2. 开发页面 项目配置 写一个首页布局 3. 打包成微信小程序 打开微信

    2024年04月23日
    浏览(40)
  • 【uniapp】将微信小程序的代码兼容支付宝小程序(持续更新)

    目前本身就有一套完善的微信小程序(兼容h5)的代码,现在的需求是将它编译成支付宝小程序,做好兼容的处理,以便后续接入支付宝服务商,在这里简单记录一下目前发现的把微信小程序编译成支付宝小程序的问题和解决方案。 建议配合其他人的记录一起看,这里只是我

    2024年02月09日
    浏览(156)
  • 将网页代码转换成微信小程序代码

    如果你想要把你的网页代码转换成小程序代码,你有以下几种方法: 使用一种叫做 H5 to 小程序 的在线工具,可以将 H5 网页转换为微信小程序项目。你只需要在网站上传你的 H5 网页文件,或者将 H5 网页的 URL 地址粘贴到文本框中,然后点击“转换”按钮,等待工具转换 H5 网

    2024年02月16日
    浏览(36)
  • uniapp多行文本展开或收起(兼容h5、微信小程序,其它未测试)

    文本过短时隐藏按钮,需要知道文本全部展示的行数 文本收起时,微信小程序不能直接获取文本展示的高度 文本展示时,微信小程序不能直接获取文本收起的高度 所以使用 占位文本 获取单行文本高度,最终通过计算得到文本全部展示时的行数 本文介绍的方法兼容h5、微信

    2024年02月02日
    浏览(46)
  • uniapp自定义输入框,实现验证码输入框、密码输入框、兼容微信小程序

    前言 在移动端或者小程序项目中,验证码输入框、密码输入框也是很常见的,今天我们就来实现一个这样的效果。 图片展示 代码实现 我这里是用uniapp实现的可兼容微信小程序。 大家如果需要微信小程序也可以参考此案例,实现思路都是一样的。 总结 这里遇到一个小小的坑

    2024年02月05日
    浏览(62)
  • HBuilderX 编译 Uniapp 微信小程序失败

    错误信息 12:58:12.378 failed to load config from vite.config.ts 12:58:12.381 error during build: 12:58:12.381 /xxxpath/node_modules/@unocss/vite/dist/index.cjs:238 12:58:12.384         return command === \\\"build\\\" !options.build?.ssr; 12:58:12.386                                                      ^ 12:58:12.388 SyntaxError

    2024年02月11日
    浏览(76)
  • uniapp 蓝牙连接设备 下发命令 监听蓝牙与设备的连接状态(兼容 微信小程序和支付宝小程序)

    1:创建蓝牙需要调用的Api文件 ly.js 2 在页面中使用index.vue 

    2024年04月14日
    浏览(52)
  • Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式

    在 Uniapp 中,可以通过使用 uni-app 统一的 API 来同时兼容 H5、web、App 和微信小程序,而引入高德地图则有以下两种语法格式供选择: 使用 Vue.js 的语法格式: 使用原生 JavaScript 的语法格式: 需要注意的是,这两种语法格式都需要在页面组件的 JavaScript 文件中引入相应的 API 文

    2024年02月05日
    浏览(58)
  • uniapp 开发规范(兼容性适配)

    因 uniapp 需同时兼容PC端,移动端,微信小程序端,app端等,建议按以下开发规范开发,可更加有效避开多端不兼容的情况: 此处 class 不要写在 u–form,单独用 view 包裹 u–form 来添加样式 直接在组件上添加样式,会出现某些端不生效的情况,建议统一用样式穿透 + !important实

    2024年01月17日
    浏览(48)
  • uni-app打包运行成微信小程序,一看就会

     不废话,直接甩步骤: 1.对HX(HBulider X)编译器配置 选择运行配置:设置微信开发者工具的位置 2.uniapp项目配置 找到自己项目的manifest.json,选择微信小程序,填写自己的appid 3.微信开发者工具设置 打开微信小程序的服务端口 设置 - 安全设置 - 打开端口号 4.在HX中编译成微信小

    2024年02月21日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包