小程序自定义实现open-type

我最近写了一个小程序的组件库,也接到一个需求,是重构小程序的某些页面,比如以下这种列表,之前都是直接copy的,导致代码比较臃肿,占用有限的空间且不好维护
在这里插入图片描述
我把组件库写好后,准备直接使用时发现有用到分享和反馈这种小程序原生button才有的属性即:

open-type='feedback'
open-type='share'

本来准备直接复用以前的来着,但是看代码很乱,就想着把它的功能在组件中直接实现好了,开始想着把已有的逻辑贴进去再加个if的属性就可以,臃肿得很, 最终理性战胜了我,试试其他实现方式,以下是我的ui组件库效果:
在这里插入图片描述
试着点了以下最下面的那个 建议反馈,进入以下页面:
在这里插入图片描述
实现原理其实是在row上面盖了一层button,将背景色直为透明即可:
在这里插入图片描述

效果看完了,code如下:
组件应用:

<mx-text text="button row 可以设置原生的open-type"></mx-text>
<mx-row label="建议反馈" iconSrc="{{xxx}}" isButtonRow="{{true}}"  showBorder="{{true}}"></mx-row>
<mx-row label="邀请好友" iconSrc="{{xxx}}" isButtonRow="{{true}}" openType="share" showBorder="{{true}}" ></mx-row>
<mx-row label="在线客服" iconSrc="{{xxx}}" isButtonRow="{{true}}" openType="contact" showBorder="{{false}}" ></mx-row>

component wxml:

  <button wx:if="{{isButtonRow}}" open-type='{{openType}}'  class="row-btn"></button>

// 是否为行按钮
  isButtonRow:{
     type: Boolean,
     value: false
   },
   // 为button时, open-type 
   openType:{
     type: String,
     value: 'feedback'  //可选值有feedback、share、contact...
   },

component wxss:

.row-btn {
  position: absolute;
  top: 0;
  width: 100% !important;
  height: 91rpx;
  z-index: 100;
  border-radius: 0;
  border:none;
  /* background-color: #267afe; */
   background-color: transparent;
}
/* 防止出现原生button的边框样式 */
button::after{
  border: none;
}

就这样,精简好用,可配置性强。

其实在实现需求时很多人容易陷入功能误区,尤其是一些交互类和展示类的需求,因为是个100%宽度的button,我开始也是这么想的准备加个if,然后发现什么按钮字体也不对,布局也有问题,又得下面又长又臭一大堆,网上搜了一下有很多开发中提问,但是没有发现有合理方法来解决这个问题的 。 最终强迫自己思考有没有更加合理的实现方式,当我把按钮设为透明有效果时,我就知道这个方案是可行的。
同理,其他的也一样。

我是想说的是开发者不必陷入条条框框的循序渐进开发中, 当你陷入麻烦时,有时候从中间跳出来会发现有更好的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kirinlau

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值