微信小程序开发踩坑与总结 -
原文链接:https://segmentfault.com/a/1190000008516296
前段时间把公司小程序项目开发完成了,所以来写写自己开发过程中碰到的问题和解决方法,以及用到的提高效率的工具和方法。
1、background图片url不能为本地图片
比如background:URL(../imgs/xxx.png),这样图片并不能显示。
解决的办法,1:将图片上传到服务器,填写服务器上的图片的路径地址。2:将图片转为base64编码。
2、扩展icon组件
小程序内部为我们提供了很多icon供我们选择(小程序icon),但是如何要用我们自己的图标而且不用image组件来扩展icon组件如何做呢。
首先,我在这里介绍一个浏览器端小程序查看与调试工具(wept),它能启动个服务,让我们在浏览器中调试页面,并且也能在修改文件后实时刷新修改后的页面。
那为什么需要这么工具呢,因为在微信开发者工具中查看wxml是看不到详细的样式信息,而这个工具在浏览器中可以看到icon组件最终的样子,而控制图片样式的就是图中的before这个伪元素,而且他的class都是以"wx-icon-"为前缀。
所以我们为我们可以这样自定义icon,然后在wxml中这样使用<icon type="custom">就可以了
.wx-icon-custom:before {
content: '',
display: inline-block;
width: 18px;
height: 18px;
background: url(xxxx)
}
3、request请求
微信小程序中为我们封装了ajax请求,api是wx.request(options)。在我项目中的需求,很多请求用的是post,但是如果你把参数method设置为post后还需要添加header的"content-type"为"application/x-www-form-urlencoded",如果你们每个request中都要重新写这个一样的header就很麻烦。在一个就是统一的错误回调,我们很多请求的错误回调中干的事情基本一样,所以我们是否设置个默认的错误回调,这样代码就简洁多了。
新建一个ajax.js文件,我们可以根据自己需求来配置defaultConfig,然后通过Object.assign来是否覆盖配置
function ajax(config) {
var defaultConfig = {
method: "GET",
fail: function() {
console.log('fail')
wx.hideToast()
wx.stopPullDownRefresh()
wx.showModal({
title: "提示",
content: "网络异常",
showCancel: false,
confirmText: "确定",
confirmColor: "#3CC51F",
})
}
}
if (config.method == 'POST') {
defaultConfig.header = {
'content-type': 'application/x-www-form-urlencoded'
}
}
let _config = Object.assign(defaultConfig, config)
wx.request(_config)
}
module.exports = ajax
然后在app.js中引用var ajax = require('utils/ajax.js'),挂载到全局的方法中,这样在每个页面通过getApp().ajax(config)就能使用自己封装后的api请求了。
4、不同页面中的数据交互
我们经常有这样的需求,修改A页面的一个数据需要跳转到B页面,在B页面中修改数据后,然后返回A页面,A页面显示修改后的数据,当然这样的需求也可能发生在同一页面的不同组件之间。而通常解决这中需求的办法是使用event-bus这样的思路,于是我开始google找到这样的一个小程序库(weapp-event),详细的使用大家可以查看链接。
5、picker-view
小程序中picker-view中bindchange方法会在滑动结束后才触发,如果我随手一滑,还没等他停下就就按确定按钮或者跳转页面,那么bindchange没触发就不能获取到滑动后改变的值,体验很不好。可是我也不能改源码,于是我去开发者平台提出了,好在工作人员也马上说下个版本优化。
6、使用gulp
现在前端工程化为我们带来很大便利,在小程序开发中,虽然使用的wxss文件,但是因本质最后还是在由浏览器渲染的,所以css也会有兼容问题,我们可以使用gulp-autoprefixer来帮我们解决css的兼容。另外,我们也可以将自己的文件在压缩打包一次,不过遇到的一个问题是压缩wxml文件,我用gulp-htmlmin不行,因为wxml中像input有些组件是必须闭合的<input />,而htmlmin会把闭合"/"去掉,导致编译错误,我查了htmlmin的api没找着不让他去掉的方法,所以大家有更好的方式压缩wxml也可以教教我。
7、生命周期
掌握好小程序页面切换,4种导航切换时生命周期的变化,很重要!
8、客服按钮
这个客服按钮<contact-button>很坑爹,不能自定样式,并且有效的点击区域也只有它显示的图标那么大,而且图标也很丑,想到这就异常的无语。不过,我们想到了一个投机的方式解决了。我们的需求是点击这一块进入客服会话,客服按钮有个属性type,我们设置它为default-light,它就是白色,能和白色背景融合看不出来,然后再铺满n个按钮,达到点击进入客服会话。红色框部分全是客服按钮!
总结
整体来说,小程序开发出来后的体验还是不错的,而小程序的语法在我有vue的基础上学起来也比较快,开发中碰到的问题,通过google和其他人开发的经验也一一解决了。都说写文章是不仅仅是给别人看的,更是给自己看的,希望大家在看了后有收获,有什么观点不同也可以告诉,谢谢。
微信小程序开发踩坑与总结 -的更多相关文章
- 微信小程序开发踩坑记
前言 微信小程序自去年公测以来,我司也申请了一个帐号开发,春节前后开始开发,现在终于告一个段落了.谨以此文记录下踩过的坑. 坑1:scroll-view与onPullDownRefresh冲突 由于有 ...
- 微信小程序开发踩坑日记
2017.12.29 踩坑记录 引用图片名称不要使用中文,尽量使用中文命名,IDE中图片显示无异样,手机上图片可能出现不显示的情况. 2018.1.5 踩坑记录 微信小程序设置元素满屏,横向直接w ...
- 微信小程序开发-踩坑
异步请求处理 详情描述: 微信小程序的wx.request({})请求时异步处理,以下代码 wx.reuest({ url:"https://XXXA", method:" ...
- [转]微信小程序开发踩坑记录
本文转自:http://www.cnblogs.com/NKnife/p/6283605.html 1.由于小程序wx.request()方法是异步的,在app.js执行ajax后,各分页加载app. ...
- 微信小程序开发踩坑记录
1.由于小程序wx.request()方法是异步的,在app.js执行ajax后,各分页加载app.js的全局数据时,无法按顺序加载.例: //app.js App({ ajax:function() ...
- 微信小程序开发踩坑之旅
项目之始: 一.搭建新项目时出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add page route in app ...
- 我的微信小程序入门踩坑之旅
前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...
- 微信小程序开发常见坑
前段时间稍微涉猎了微信小程序开发,踩了一些坑,在此总结出来,希望能为小伙伴们提供一点帮助. 页面跳转 对于页面跳转,可能习惯性想到wx.navigateTo,但是在跳转到目标页面是一个tab时,此接口 ...
- 微信小程序开发填坑指南V1
近期用了一星期的时间,开发了一个小程序.小程序名称是:小特Jarvis,取自钢铁侠的管家. 后台采用C#编写,WebAPI接口.其实开发时间并不多,小程序本身提供的API,相比公众号的API来说,已经 ...
随机推荐
- RedHat7配置静态IP
1.验证网络管理器状态,Active: active (running)表示正在运行,一般RHEL7都默认安装了. [root@localhost ~]# systemctl status Netwo ...
- Eclipse中引来的jar包乱码
Eclipse中引入的jar包乱码jar包链接的源码,中文注释为乱码的解决方法: 1.将Eclipse的Preferences中的General>ContentTypes中的Java Class ...
- CSS选择器笔记,element element和element > element 的区别
看官方解释 element element 例子: div p 官方解释:div内部所有的p元素 就是说 只要p在div内部.如果 p在span内部,span在div内部,p也算在div内部 < ...
- netty之==线程模型
1.1 netty线程模型本质遵循了Reactor的基础线程模型,所以得先介绍Reactor模型 1.2 Reactor模型 无论是C++还是Java编写的网络框架,大多数都是基于Reactor模 ...
- C# 使用消息队列,包括远程访问
转:https://www.cnblogs.com/80X86/p/5557801.html 功能需求,用到了队列,用的时候出了很多问题,现在总结一下,希望能对有需要的人提供帮助. 我的需求很简单,就 ...
- phpstorm 配置 webserver ,配置根目录
原文链接 http://blog.csdn.net/pony_maggie/article/details/52367093 phpstorm自带了一个web server,我们可以直接在IDE ...
- C#使用进度条,并用线程模拟真实数据 ProgressBar用法(转)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- java 模拟实现消费者和生产者问题
题目要求 用java代码模拟实现:一个人不断往箱子里放苹果,另一个人不断从箱子里取苹果,箱子只能放5个苹果,苹果数量无限.要求不使用java.util.concurrent包中的类. 思路 这道题主要 ...
- (生产)jsonp - 跨域请求
参考:https://github.com/webmodules/jsonp 参数: url (String) url to fetch opts (Object), optional param ( ...
- 让DIV的滚动条自动滚动到最底部
一个在线聊天窗口,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息. 我得出的结论是:在选中div时,必须用原生js,jQuery不起作用 <!DOCTYPE> < ...