小程序学习笔记

相关资源

常用代码

1. 关于引入

样式导入
引入 css:

@import "../templates/list-item/list-item.wxss";

WXML 提供两种文件引用方式 import 和 include
引入 wxml template:

<import src="../templates/share/share.wxml" />

拷贝 wxml:

<include src="../templates/share/share.wxml" />

2. 方法如何传参数

没法直接传参数,都要通过 dataset 获取,代码示例如下:
wxml:

<view class="delete" data-id="{{id}}" catchtap="deleteItem">删除</view>

js:

deleteItem: function(e){
    var id = e.currentTarget.dataset.id;
    ......
}

3. 修改数组对象的某个元素的属性

var param = {};
var string = "list[" + index + "].text";
param[string] = 'changed data';
this.setData(param);

微信小程序 setData 的坑
setData的灵活应用

(愚蠢的)错误

1. 微信的某个固定方法未生效

问题:
在某个页面的 js 中定义 onShareAppMessage 函数,设置该页面的转发信息,但是设置的属性却没有生效。
原因:
初始化页面时微信开发者工具会自己将部分生命周期及其他方法(包括 onShareAppMessage 函数)定义在页面里,我自己在代码前面又重新定义了 onShareAppMessage 函数,导致该函数被后面的空函数覆盖,因此设置的属性方法等未生效。
解决:
删除空函数。
引以为戒,不要犯类似的愚蠢错误。

2. navigateTo 跳转失败

问题:
报错:navigateTo:fail url "" is not in app.json
解决:
检查下页面是否已经在 app.jsonpages 属性下注册了。
或者该页面的 js 文件是否已经定义了 page 方法:Page({})
或者 json 文件中是否为空(不能为空,至少要有 {})。

问题:
点击按钮触发 wx.navigateTo 方法,但没有任何反应。
解决:
wx.navigateTo 方法不能跳转到存在 tabBar 的页面,即那些已经在 app.jsontabBar 字段下定义的页面。
要想跳转到 tabBar 页面,可以使用 wx.switchTab

真机测试

1. 模仿微信消息的左滑删除功能效果不佳

问题:
小程序:模仿微信左滑动,出现标为未读和删除按钮,好不容易实现的功能,在真机上测试时却发现动画效果很差,滑块同滑块中的文字会以不同的速率移动,很奇怪。
解决:
只能改成点击出现操作菜单的方式了,提供一个按钮,点击就使用 wx.showActionSheet 显示操作菜单。

2. tabBar 图标 81px*81px 显大

问题:
配置 tabBar 的 iconPath 时,官方说明为:图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 postion 为 top 时,此参数无效。
我理所当然让 UI 制作了该尺寸的 icon,在开发者工具上查看时效果还行,但在真机上调试时却发现图标过大,不好看。
解决:
最后 UI 将实际 icon 大小调为 62px62px,加上空白区域仍旧导出 81px81px 的图片给我。

3. 显示用户默认头像

问题:
一般小程序都会获取用户的基本信息如昵称和头像,但同时也要考虑到用户拒绝授权的情况(wx.getUserInfo 接口需要用户授权,请兼容用户拒绝授权的场景),如果拒绝,原本应该显示头像区域的地方可以显示一个默认的头像,但真机测试时我使用的测试账号连头像都没设置,因此即使同意授权了头像区域还是一片空白。
解决:
做好判断,即使授权成功获取到的用户头像信息仍旧可能为空。

奇怪的坑

1. margin-bottom 在 ios 下无法撑起页面

问题:
某个页面底部有一个 fixed 元素,会遮住页面一部分,而我希望能够完整看到当前页面的内容,因此就对当前页面的内容包裹元素加了个 margin-bottom: 140rpx; 以此撑起一定高度,希望可以通过滚动看到完整的页面内容。
但是在 ios 下该 margin-bottom 未起作用,页面无法向下拉到底,而在安卓下效果正常。
解决:
新增一个隐藏的(background-color:transparent;)元素,设置高为 140rpx;

推荐阅读更多精彩内容