这篇文章主要讲解了“微信小程序开发时遇到的坑有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序开发时遇到的坑有哪些”吧!
最近参与开发了公司的第一款小程序,开发体验基本类似于基于webview的混合式开发,可以调用官方强大的api,但也有一些坑或者说不习惯的地方。这篇文章从实用性出发,记录了开发过程中的一些问题:
1。样式优先级混乱
在使用按钮组件时,发现在类中设置宽度不生效,下面贴上代码:
.my-button { ,宽度:140 rpx; ,高度:60 rpx; ,行高:60 rpx; ,填充:0; }
经过微信调试工具排查后,发现用户代理的样式优先级居然大于我们自己写的样式类,这在浏览器中基本是不可能发生的事情
解决方案其实比较简单,给宽度添加!重要的后缀或者即可,修改后我们再看一下效果:
加上!重要之后,其实宽度的实际效果已经符合我们的预期了,但是微信调试工具却仍然显示用户代理样式优先,这应该算是调试工具的一个错误吧。
2。普通UI组件封装,参数定义繁琐
一般UI视觉稿中的基础组件,例如按钮,是有特定样式的:比方说背景色/字体。利用小程序的组件函数封装成组件,编写默认样式并接收外部传入的类,可以方便后续开发。
反应有& lt;标记{…道具}祝辞& lt;/tag>这种写法,即组件接收道具不做处理,只透传给下一个组件,但小程序不支持这种写法(苦搜无果,官方文档也没有说明)。
这就意味着我们需要把所有按钮组件支持的参数都罗列在属性中:
属性:,{ ,,类:{ ,,,类型:字符串, ,,,的值:& # 39;& # 39; ,,}, ,,类型:{ ,,,类型:字符串, ,,,的值:& # 39;默认# 39; ,,}, 普通的才能:{ ,,,类型:布尔, ,,,的值:false, ,,}, ,,大小:{ ,,,类型:字符串, ,,,的值:& # 39;默认# 39; ,,}, ,…… },
3。全局样式选择器*被禁用
* { ,box-sizing: border-box; }
上面的代码在编译的时候就会报错,因为小程序禁用了这类选择器。大胆猜测具体原因:这类作用范围比较广的选择器和自定义组件的样式隔离产生了冲突? ?
那怎么去给小程序添加全局通用样式?看来只能自己把用到的标签都手动写一遍了,还好网上有现成的代码可以贴:
视图中,滚动视图,偷窃者,swiper-item,活动区,movable-view,封面视图,封面图片,图标,文字、富文本,进步,按钮,复选框组,复选框,形式输入,标签,选择器、picker-view,单选组合,收音机,滑块,开关,文本区域,导航,functional-page-navigator,图像,视频,摄像头,live-player, live-pusher,地图,画布,公开数据,网页视图,广告{ ,box-sizing: border-box; }
4。自定义组件,绑定:水龙头调用两次
封装基础组件时,例如按钮、下面的写法应当避免:
onTap (e), { ,if (! this.data.disabled ,,, ! this.data.loading), { this.triggerEvent才能(& # 39;利用# 39;,,e.detail) ,} },
& lt; button bindtap=皁nTap"祝辞& lt;/button>
这样封装出来的组件,会触发两次利用事件,一次是小程序自身触发的,一次是通过triggerEvent触发。
可以换一个非小程序内置的事件类型,比如点击:
onTap (e), { ,if (! this.data.disabled ,,, ! this.data.loading), { this.triggerEvent才能(& # 39;点击# 39;,,e.detail) ,} },
阻止丝锥事件冒泡也可以解决:
& lt; button catchtap=皁nTap"祝辞& lt;/button>
5。在wxml中用Boolean()做类型转换
例如在一个组件中,监听一个字符串类型的参数,如果不为空则显示文本标签,否则不显示:
//, player.wxml & lt; text 类=皌ext1",天气:如果=皗{,布尔(leftText)}}“在{{,leftText }} & lt;/text>微信小程序开发时遇到的坑有哪些