导航
当前位置:首页>>小程序

uniapp开发的微信小程序坑

2024-09-09 围观 : 0次

Uniapp是目前比较流行的一种跨平台开发框架,它可以使用一套代码基于Vue框架开发出同时支持多个平台的应用程序,包括H5、微信小程序、支付宝小程序、APP等。尽管Uniapp有很多优点,但是在开发微信小程序时也存在一些坑点,下面是对其中几个坑点的原理分析以及详细介绍。

一、rpx与px单位的转换

微信小程序使用的单位为rpx,但是在Uniapp中使用的是px单位,这就需要将px转换为rpx单位。Uniapp提供了一个名为“flexible”的插件,它会自动计算出当前设备的rpx单位的换算比例。需要在入口组件中引入该插件并且配置设计稿尺寸,如下:

```javascript

import '@/common/js/flexible.js';

// 设计稿尺寸

uni.setMatchedLayoutSize({

width: 750,

height: 1334

});

```

在App.vue中设置基准字体大小为50px,其实际代码如下:

```css

html {

font-size: calc(100vw / 3.75);

font-family: PingFang-SC-Regular, sans-serif;

}

```

具体实现原理是通过JS动态计算出当前设备的dpr(设备像素比)和设备宽度,然后将页面的font-size设置为width/dpr/10,进而实现了px到rpx的转换。

二、页面跳转传参

在微信小程序中,可以通过wx.navigateTo()实现页面跳转并传递参数。但是在Uniapp中,需要使用uni.navigateTo()跳转页面,但是该方法并没有原生的options属性用于传递参数。如何实现页面跳转并传递参数呢?具体有以下几种方法:

1、通过URL传参,比如在跳转页面时将参数拼接到URL上,如页面跳转到detail页面并传递id为1的参数:

```javascript

uni.navigateTo({

url: '/pages/detail/detail?id=1'

})

```

在detail页面中,可以通过以下代码获取该参数:

```javascript

this.$route.params.id // 输出1

```

2、通过uni.navigateBack()返回时传递参数,需要在前一页面中设置onUnload方法,在离开页面时保存要传递的参数,并在返回时通过uni.navigateBack()方法的参数传递回去。

具体实现可以参考以下代码:

```javascript

// 前一页页面中

onUnload: function() {

if (this.isChanged) {

uni.setStorageSync('isChanged', true);

}

}

// 本页中,返回上一页时触发

uni.navigateBack({delta : 1, params: {isChanged: uni.getStorageSync('isChanged')}});

```

在上一页中,可以通过以下代码获取该参数:

```javascript

onShow: function() {

var pages = getCurrentPages();

var prevPage = pages[pages.length - 2];

if (prevPage){

if (prevPage.$route.params.isChanged) {

// do something

}

}

}

```

三、微信小程序Swiper组件的高度问题

微信小程序的Swiper组件可以自适应容器高度,但是在转化为Uniapp开发时,容器高度就变成了0。这是因为在微信小程序中,Swiper组件的高度是在wx.createSelectorQuery()中计算的,而在Uniapp中wx.createSelectorQuery()则被替换为uni.createSelectorQuery(),导致了高度计算不正确,解决方法有以下两种:

1、使用uni.createIntersectionObserver()监听Swiper组件上下滚动,获取到Swiper的实时高度:

首先需要在Swiper组件外面嵌套一个view,同时将view的height设置为100%。然后通过uni.createIntersectionObserver()监听view的位置变化,获取到当前view的高度,即Swiper组件的高度,进而解决问题。

2、在swiper组件中加入样式white-space: normal,如:

```css

.swiper-slide {

white-space: normal;

}

```

通过这个方法,swiper组件高度也会自适应父容器。

四、onShareAppMessage无法在组件中直接使用

在微信小程序中,在组件中使用onShareAppMessage可以实现转发功能,而在Uniapp中无法在组件中直接使用该方法,需要通过`this.$parent.onShareAppMessage()`调用父页面的onShareAppMessage方法。

五、微信小程序navigator跳转新建页面在Uniapp中无法打开

在微信小程序中,在navigator组件中添加属性target="_blank"可以打开一个新页面,但是在Uniapp中,添加该属性后页面依然是在同一个页面中打开的。解决方法也很简单,只需要在navigator组件上包裹一个view标签即可,如:

```html

跳转新页面

```

以上就是Uniapp开发微信小程序时容易遇到的坑点,希望对大家有所帮助。

标签: uniapp 微信小
相关文章
  • 小程序开发工具里的模板

    小程序开发工具是微信官方提供的一款用于小程序开发的集成开发环境(IDE),它提供了多种模板供开发者使用。这些模板可以快速搭建起小程序的基础框架,让开发者只需要把自己的业务逻辑和页面布局插入其中即可,大大节省了开发者的时间和精力。下面我们针对小程序开发工具的模板进行详细介绍。一、模板种类小程序开发工具...

    2023-12-04
  • java开发微信小程序流程

    Java开发微信小程序主要分为以下几个步骤:1. 注册微信公众平台账号首先需要在微信公众平台(https://mp.weixin.qq.com/)上注册一个账号,并进行相关资质认证。认证通过后,可以在平台上创建小程序并获取到AppID。2. 下载微信开发工具微信提供了一个开发工具,...

    2024-08-06
  • h5 开发小程序

    随着移动互联网的快速发展,小程序逐渐成为了用户进行移动端交互的主要方式之一。小程序的优点在于无需下载,快速打开,且占用设备空间较少等。除了传统的原生开发之外,h5开发小程序也是一种相对简便的方法。 h5开发小程序的原理主要是通过将网页嵌入到小程序的webview中,充分利用网页技术...

    2024-07-20
  • 微信小程序定制开发工具

    微信小程序是一种轻量级的应用,以其可快速启动、低成本维护和跨平台等特点受到越来越多开发者的青睐。而微信小程序的定制开发工具也同样成为了越来越多的企业和个人选择。微信小程序定制开发工具原理微信小程序定制开发工具是指一种能够将小程序开发者工具进行二次开发并基于此构建私有的小程序开发工具。定制开发工具的实...

    2023-11-28
  • php微信小程序开发书籍

    PHP 是一种非常流行的后端编程语言,主要用于开发 Web 应用程序。然而,现在 PHP 开发人员也可以使用 PHP 开发微信小程序,这给很多人带来了方便。现在市面上有很多关于 PHP 微信小程序开发的书籍,其中有一些是针对初学者的入门指南,而另一些则更加注重深入的技术介绍和实践经...

    2024-08-19