微信小程序常见问题总结及解决办法(2017 年 1 月 11 日更新)

2024-07-10
来源:网络整理

微信小程序常见问题汇总(4058)及解决方法

更新时间:2017-01-11 14:47:44 贡献者:lqh

本文主要介绍微信小程序常见问题及解决方法汇总,这里先介绍一下微信小程序的架构,然后讲解常见问题,有需要的朋友可以参考以下

微信小程序常见问题解答:

1. 项目结构

微信小程序项目结构主要有四种文件类型,如下

WXML()是框架设计的一套标签语言,可以通过组合基础组件、事件系统来构建页面的结构,内部主要是微信自己定义的一套组件。

WXSS()是用于描述WXML组件样式的样式语言。

js逻辑处理,网络请求

json 小程序设置,例如页面注册,页面标题等

注意:为了帮助开发者减少配置项,描述页面的四个文件必须具有相同的路径和文件名。

根目录中以“app”为名的四类文件是程序入口文件。

应用程序.json

该文件是必须的,如果没有这个文件,项目就无法运行,因为微信框架以此作为配置文件的入口,整个小程序的全局配置,包括页面注册,网络设置,小程序的背景颜色,导航栏样式的配置,默认的配置。

应用程序.js

这个文件必须存在,否则会报错!不过你只需要创建这个文件就可以了,不需要写任何东西。

后面我们可以在这个文件中实现对小程序的生命周期函数的监控、处理以及全局变量的声明。

应用程序.wxss

全局配置的样式文件,项目不需要。

现在知道了小程序的基本文件结构,就可以开始学习官方的demo了。学习过程中如果有问题,可以去官方文档找答案。如果找不到答案或者有疑问,可以在本博客留言,互相交流。以下是一些最常见的问题。

2. 常见问题

rpx()

微信小程序新定义了一个可以适配不同分辨率屏幕的尺寸单位,规定了屏幕宽度为。比如上图,屏幕宽度为,一共有750个物理像素,那么= =750个物理像素,1rpx = 0.5px = 1个物理像素。

我这个项目用rpx作为计量单位,遇到一个很奇怪的问题,相邻两条信息之间有一条分割线,我把这条线的高度设置为1rpx,但是有的分割线没有显示出来。

注意到第一张和第二张图没有显示分割线,其他都显示了。分割线的属性都一样,在不同的手机(不同分辨率)上不显示的分割线也不同,有的分辨率有几条分割线不显示,不知道这是模拟器的bug还是rpx的bug。最后将分割线的高度单位改为px,解决了这个问题。

错误

微信小程序刚发布的时候,如果输入这个提示,说明没有破解。不过现在官方的软件更新可以选择无开发,如下图所示。我们选择无就可以解决这个错误。建议安装官方的开发工具,下载链接在这里。

4058 错误

创建微信小程序项目时选择 None,创建项目时会生成 app.json,app.josn 是程序启动最重要的文件,程序的页面注册、窗口设置、标签页设置、网络请求时间设置等都在这个文件中。如果你创建的项目目录下没有 app.json 文件,则会报如下错误。

我们可以看到上面的错误信息中有一个数字-4058。这个应该是大家刚开始使用微信小程序时遇到的最常见的错误。这个一般是因为缺少文件,后面有一个路径,可以通过查看路径来判断文件是否存在。出现这个错误的原因一般是创建项目时选择的目录不正确,或者在app.json中注册了一个不存在的页面。

当然还有一种情况,就是app.json文件中注册的页面没有创建,或者你删除了某个页面但是没有取消注册,这样也会导致-4058错误。

页面注册错误

这个错误可能比较容易理解,页面注册错误。页面是由Page对象渲染的,每个页面对应的js文件都要创建一个page,最简单的做法就是在js文件下面写上Page({})。page管理着页面渲染的生命周期,以及数据的处理和事件。出现这个错误的原因一般是页面刚刚创建,js文件还没处理完或者忘记了。所以大家要养成在创建页面时在js文件中创建Page的习惯。

页面错误

字面意思就是页面路由错误,微信中有两种路由方式,一种是在wxml文件中使用。

微信小程序开发工具安装出错_微信开发者工具安装步骤_微信开发者工具安装包

以下代码:

wxml文件:

js文件事件处理函数:

bindtap:function(event){ wx.navigateTo({ url: "search/search" }) }

如果你这样写,那么恭喜你,你会看到上面提示的错误。这是由于重复调用路由导致的。解决办法是删除一条路由。

搜索

这也是不允许的,也就是说

页面中没有*。

大致意思就是当前页面没有这个处理,询问是否已经定义过。同时还指出了可能出错的位置。其实这个问题一般是我们在wxml中定义了一些处理事件,但是js文件中没有实现该事件的处理方法,就会导致这个错误。那么我们根据提示在js文件中添加事件处理,如下代码所示,添加之后就不会再有错误提示了。

bind:function(event){ wx.navigateTo({ url: " pages/logs/logs " }) },

设定不显示

不显示的原因有很多,找到这个错误直接去app.json文件,最常见也是刚学微信小程序最容易犯的错误无非就是下面这些

注册页面会写入app.json的字段,如

"pages":[ "pages/index/index", "pages/logs/logs", "pages/account/account", "pages/more/more" ],

该错误是由于将大写字母 B 写成小写而导致显示错误。

列表中没有字段,或者页面未注册

列表中的指定页面,在注册页并没有写成第一个,微信小程序的逻辑是“”中的第一个页面为首页,也就是程序启动后显示的第一个页面,如果列表中的指定页面不是第一个,当然就不会显示。

条目数量少于2条或者多于5条,微信官方明确规定至少2条,最多5条,超过或者少于5条则不显示。

显示问题

通过这个动态图大家应该已经发现问题了,点击音乐进入音乐界面的时候,先显示音乐,再显示,这种体验肯定是让人无法接受的,原因是js文件中在页面的生命周期方法中设置了音乐界面。

如果不太了解生命周期,可以点击查看

Page({ data:{ // text:"这是一个页面" }, onLoad:function(options){ // 页面初始化 options为页面跳转所带来的参数 }, onReady:function(){ // 页面渲染完成 //NavigationBarTitle如果此处和json文件都设置,最后展示此处的标题栏 wx.setNavigationBarTitle({ title: '账户' }) }, onShow:function(){ // 页面显示 }, onHide:function(){ // 页面隐藏 }, onUnload:function(){ // 页面关闭 } })

从注释里你应该明白了的设置是写在方法里的,也就是说页面已经渲染完成了,之前显示的是json文件(覆盖关系,如果在子页面设置了json文件设置,会覆盖app.json全局设置)。你可能会说wx.e是写在函数里的,但是这样设置是不正确的,因为执行完页面才渲染,渲染页面的时候会从json文件中读取,导致页面渲染完成之前只显示该设置,之后json文件tile才会显示。所以现在你应该明白了,设置ttle最好的地方就是给子文件写一个json文件,写在文件中,如果要改颜色,直接在文件里添加就行了,写在文件中的属性值会覆盖app.json中设置的值。

{ "navigationBarTitleText": "账户" }

wx. 无法打开页面

一个应用最多可以同时打开5个页面,当已经打开5个页面时,wx.无法正常打开新页面,请避免多级交互或者使用wx.

无法通过css获取本地资源

-:您可以使用在线图片,或者,或者使用标签

页面间数据传输

微信小程序路由(页面跳转)是通过wx.或者wxml API来完成的

{{item.title}} {{item.message}} {{item.time}} {{item.count}}

数据是在js文件的页面中接收的,页面生命周期中有一个函数,就是做一些初始化数据的工作,该函数有一个参数,我们可以通过key来获取数据,如下

Page({ data:{ // text:"这是一个页面" isHiddenToast:true } onLoad:function(options){ // 页面初始化 options为页面跳转所带来的参数 console.log(options.title) console.log(options.message) }, onReady:function(){ // 页面渲染完成 }, onShow:function(){ // 页面显示 }, onHide:function(){ // 页面隐藏 }, onUnload:function(){ // 页面关闭 }, bind:function(event){ wx.navigateTo({ url: " pages/logs/logs " }) }, })

感谢您的阅读,希望能够对您有所帮助,感谢您对本站的支持!

分享