前言

微信小程序自去年公测以来,我司也申请了一个帐号开发,春节前后开始开发,现在终于告一个段落了。谨以此文记录下踩过的坑。

坑1:scroll-view与onPullDownRefresh冲突

由于有几个页面需要将导航tab栏自动置顶,所以使用了scroll-view。然而又想要下拉刷新,本来想直接使用onPullDownRefresh,结果却发现下拉的时候onPullDownRefresh根本没有!囧!

研究了半天,最终监听touchXXX自己模拟了个下拉刷新。(具体实现方案改日再分享。)为了尽量接近微信原生的下拉刷新,还特意抄了半天微信原生的下拉刷新动画...

<div class="loading"><div class="dot"></div></div>

  

.loading{
display: block;
width: 100%;
height: 20px;
padding: 20px 0;
text-align: center;
background: #eee;
}
.loading::before,
.loading .dot,
.loading::after
{
content: '';
display: inline-block;
color: transparent;
width: 14px;
height: 14px;
border-radius: 14px;
background: #fff;
overflow: hidden;
margin: 0 8px;
} .loading::before,
.loading .dot,
.loading::after{
-webkit-animation: pulldown-refresh-loader 1.4s infinite ease-in-out;
animation: pulldown-refresh-loader 1.4s infinite ease-in-out;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.loading::before{
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
}
.loading .dot{
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
} @-webkit-keyframes pulldown-refresh-loader {
0%, 80%, 100% { background-color: #f0f0f0; }
40% { background-color: #fff; }
} @keyframes pulldown-refresh-loader {
0%, 80%, 100% { background-color: #f0f0f0; }
40% { background-color: #fff; }
}

 

坑2:无法获取元素的高度

本来有个页面是要做成监听滚动,然后自动切换顶部tab的,类似 bootstrap的滚动监听 的效果。 然而里面有大段的文本,而文本的高度根本算不来,囧。还是放弃这个效果吧。

坑3:无法在bindXXX的事件处理的时候阻止冒泡

有人说,你可以使用catchXXX呀!然而,我在某些时候才需要阻止事件冒泡,另外一些时候是不需要阻止冒泡的,是需要默认行为...

最终采用了一个很挫的方案来“解决” -- 复制那个<view>根据是否组织冒泡分别渲染成bindXXXcatchXXX...:

<view class="{{preventDefault && 'hide'}}" catchXXX="yyy" >zzz</view>
<view class="{{!preventDefault && 'hide'}}" bindXXX="yyy" >zzz</view>

这个还不能简单地使用wx:if,否则切换的成本太高了点。

坑4: 预览前构建时间比较长

貌似没有好办法,预览的构建貌似不是增量的,希望微信官方啥时候能改成增量的就好了。点击预览按钮后去倒杯水喝吧。

坑5: 组件复用好蛋疼

小程序里面虽然提供了<template>可以复用一部分模版,但是我们要是想复用一个具有完整功能组件(比如一个对话框 )就会非常蛋疼 -- 数据怎么传呢?业务逻辑代码写在哪里?样式如何加载?

目前解决方法是将组件封装成 xxx.jsxxx.wxmlxxx.wxss,用的时候都要引用下... 好麻烦!很怀念React里面的组件。

回头考虑通过在微信小程序前面加一道构建,以便自动引用组件相关东东。

坑6:不支持webview直接嵌入html代码

像后台通过富文本编辑器录入的文章页面没法直接显示了... 还好有wxParse。尽管样式调起来很蛋疼,起码能看了。

坑7:测试与发布

微信开发者工具的预览版本只能谁登录谁来扫,其他人扫根本开不了 --- 同是一个小程序的开发者也不行,囧。为了让测试人员方便测试,还得教会测试人员如何登录微信开发者工具,如何更新代码,如何构建并预览小程序。。。

啥,你说有“预览版本”,预览版本更麻烦,上传的时候只能管理员才能上传,上传完还必须选择为预览版本,预览版本还不是每个人能看的,而是加到预览者里面的才能看(开发者居然默认没有加到预览者里面!) -- 每一个操作都是要管理员扫码...

后记

微信小程序坑还有很多,未完待续...

微信小程序开发踩坑记的更多相关文章

  1. 微信小程序开发踩坑日记

    2017.12.29  踩坑记录 引用图片名称不要使用中文,尽量使用中文命名,IDE中图片显示无异样,手机上图片可能出现不显示的情况. 2018.1.5  踩坑记录 微信小程序设置元素满屏,横向直接w ...

  2. 微信小程序开发踩坑与总结 -

    原文链接:https://segmentfault.com/a/1190000008516296 前段时间把公司小程序项目开发完成了,所以来写写自己开发过程中碰到的问题和解决方法,以及用到的提高效率的 ...

  3. 微信小程序开发-踩坑

    异步请求处理 详情描述: 微信小程序的wx.request({})请求时异步处理,以下代码 wx.reuest({ url:"https://XXXA", method:" ...

  4. [转]微信小程序开发踩坑记录

    本文转自:http://www.cnblogs.com/NKnife/p/6283605.html 1.由于小程序wx.request()方法是异步的,在app.js执行ajax后,各分页加载app. ...

  5. 微信小程序开发踩坑记录

    1.由于小程序wx.request()方法是异步的,在app.js执行ajax后,各分页加载app.js的全局数据时,无法按顺序加载.例: //app.js App({ ajax:function() ...

  6. 微信小程序开发踩坑之旅

    项目之始: 一.搭建新项目时出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add page route in app ...

  7. 我的微信小程序入门踩坑之旅

    前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...

  8. 微信小程序开发常见坑

    前段时间稍微涉猎了微信小程序开发,踩了一些坑,在此总结出来,希望能为小伙伴们提供一点帮助. 页面跳转 对于页面跳转,可能习惯性想到wx.navigateTo,但是在跳转到目标页面是一个tab时,此接口 ...

  9. 微信小程序开发填坑指南V1

    近期用了一星期的时间,开发了一个小程序.小程序名称是:小特Jarvis,取自钢铁侠的管家. 后台采用C#编写,WebAPI接口.其实开发时间并不多,小程序本身提供的API,相比公众号的API来说,已经 ...

随机推荐

  1. vue 之bug<1> Warn : [vue-router] Duplicate named routes definition:

    原因:定义重复的路由名称. 我有3个不同的(父级)vue文件分别配置了3个相同的(子级)vue文件,配置路由的js文件里子集路由的name重复了. 解决方案: 一天一个小Bug

  2. $bzoj1011-HNOI2008$ 遥远的行星 其他

    题面描述 直线上\(N\)颗行星,\(X=i\)处有行星\(i\),行星\(j\)受到行星\(i\)的作用力,当且仅当\(i<=A_j\).此时J受到作用力的大小为\(F_{i\to j}=\f ...

  3. Ubuntu安装google-chrome

    原文地址:http://www.linuxidc.com/Linux/2013-10/91857.htm安装谷歌浏览器,只需要三行代码: 打开终端,输入 cd /tmp 对于谷歌Chrome32位版本 ...

  4. Linux 远程登录ssh服务器

    1.安装ssh服务器 sudo apt-get install openssh-server 2.在另一端输入ssh  IP及密码(或ssh 用户名@IP)就可以远程登录到IP所在计算机

  5. django notes 二:URL dispatcher

    一般在 settings.py 中会有一个  ROOT_URLCONF ,请求到来时 django 会从 ROOT_URLCONF 指向的文件中查找  urlpatterns 变量配置的路由. url ...

  6. ubuntu16上安装openJDK.md

    ubuntu16上安装openJDK.md 环境 操作系统:ubuntu 16.04.2 LTS 安装 当你不需要安装oracle的JDK时,使用openJDK,安装就比较方便. sudo apt-g ...

  7. MySql数据快速导入

    使用LOAD DATA INFILE 插入速度可以提升很多 左侧是直接导入100W花费135s ,Dos界面通过Load方式导入450W只用时23s,性能一下子显示出来了.

  8. Mybatis执行sql(insert、update、delete)返回值问题

    数据库:Mysql 在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下. 结论: insert:   插入n条记录,返回影响行数n.(n>=1,n为0时实际为插入失败) up ...

  9. CAP理论-解析

          分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值.(等同于所有节点访问同一份最新的数据副本) ...

  10. Safari无痕模式下,storage被禁用问题

    前言 Safari开启无痕模式后,localStorage和sessionStorage为空,对其进行set操作也会报错,也就是说这种情况下,storage是被禁止使用了.接下来说一下解决方法. 解决 ...