微信小程序-picker组件重新封装 增加disabled属性--上文

本文介绍了如何在微信小程序中重新封装picker组件,以实现特定选择项置灰并禁止选择的功能。通过custom-picker组件,可以对单个选项设置disabled状态,展示为灰色且无法选中。文中提供了组件的使用示例和代码片段,详细说明了在父组件中如何通过selectComponent方法获取子组件实例,并强调了子组件id的唯一性要求。
摘要由CSDN通过智能技术生成

前提:在微信小程序中,使用微信原声组件picker时,只能为当前picker设置disabled置灰功能,却不能使得picker组件中的具体某一选择项置灰,有时这种情况就会在某些功能上出现不适用的情况!!

所以这里重新封装了一个 custom-picker组件 ----类似picker组件,但是多了选择项置灰的功能

点击这里:微信小程序-picker组件重新封装 增加disabled属性--下文

如图所示:

当picker中某一项不可选择时,会如下图所示,颜色灰色,且用户不可点击选择。


代码始于这里: 

以下是在父组件orderInfo中使用子组件custom-picker

// orderInfo.wxml
<view class="cell-section">
    <text class="cell-title isrequired">付款方式</text>
    <view class="cell-input" bindtap="showCustomPicker" data-id="payWayList">
             <custom-picker 
             id='custom-picker-payWayList' 
             bindcustomEvent="bindcustomPickerChange" 
             value="{{code}}" 
             range="{{selectList.payWayList}}" 
             range-key="nameZH" 
             >
                <text class="{{form.paymentMethod ? '':'gray'}} weui-input">{{form.paymentMethod || '请选择'}}</text>
             </custom-picker>
     </view>
</view>


<view class="cell-section">
            <text class="cell-title isrequired">授信方式</text>
            <view class="cell-input" bindtap="showCustomPicker" data-id="creditMethodList">
              <custom-picker 
                id='custom-picker-creditMethodList'     
                bindcustomEvent="bindcustomPickerChange" 
                value="{{code}}" 
                range="{{selectList.creditMethodList}}" 
                range-key="nameZH">
                <text class="{{form.creditMethod ? '':'gray'}} weui-input">{{form.creditMethod || '请选择'}}</text>
              </custom-picker>
            </view>
</view>

 ⚠️这里使用this.selectComponent()方法获取子组件的实例

因页面中使用了多个 custom-picker 组件,所以每个custom-picker 组件的id需要必须唯一!这样才可分别拿到每个子组件的实例对象

// orderInfo.js

Page({
    // 触发customPicker.showPicker事件,显示选择框
    showCustomPicker(e){
    // 组件间通信,父组件可以通过this.selectComponent方法获取子组件实例对象,这样就可以直接访问组件的任意数据和方法。
    const customPicker = this.selectComponent(`#custom-picker-${e.currentTarget.dataset.id}`) // 获得子组件实例对象
    customPicker.showPicker()
  },
    
    // 这里是自定义组件的回调事件
    bindcustomPickerChange(e){
        // 通过this.setData存储想要的数据
        console.log(e)
        const eValue = e.detail
        通过拿到相应的选择项的下角标值,做分析取值
        
        this.setData({
            。。。
        })

    }

})
// orderInfo.wxss
.isrequired::before{
  content: '*';
  display: block;
  color: #f00;
  position: absolute;
  left: 10rpx;
}
.cell-section {
  position: relative;
  display: flex;
  border-bottom: 1rpx solid #D9D9D9;
  margin-left: 15px;
}
.cell-title {
  margin-top: .77em;
  margin-bottom: .3em;
  padding-left: 15px;
  padding-right: 15px;
  color: #999999;
  font-size: 14px;
}
.cell-input {
  flex: 2;
  padding-right: 15px;
  text-align: right;
}
.gray {
  color: #6e6d6d;
}

 ----文件目录

// orderInfo.json
{
  "navigationBarTitleText": "订单详情",
  "usingComponents": {
    "custom-picker": "../components/customPicker/index"
  }
}

这里是下文:
微信小程序-picker组件重新封装 增加disabled属性--下文:custom-picker组件的封装icon-default.png?t=N7T8https://blog.csdn.net/q1ngqingsky/article/details/122621678

el-date-picker 组件disabled-date 属性用于指定哪些日期是禁用的,即不可选取的。它可以是一个函数或者一个日期数组。 如果使用函数,在函数中需要返回一个布尔值来表示当前日期是否被禁用。例如: ```javascript <template> <div> <el-date-picker v-model="date" :disabled-date="disabledDate"></el-date-picker> </div> </template> <script> export default { data() { return { date: '' } }, methods: { disabledDate(time) { // 在这里判断 time 是否被禁用,返回 true 表示禁用,false 表示可选 return time.getTime() > Date.now(); } } } </script> ``` 在上面的例子中,disabledDate 函数会被调用多次,每次传入一个时间对象作为参数。我们可以根据自己的需求来决定哪些日期是禁用的。上述例子中,我们简单地通过比较时间戳判断时间是否超过当前时间来禁用未来的日期。 另外,disabled-date 还支持接收一个日期数组来指定禁用的日期,例如: ```javascript <template> <div> <el-date-picker v-model="date" :disabled-date="disabledDates"></el-date-picker> </div> </template> <script> export default { data() { return { date: '', disabledDates: ['2021-01-01', '2022-12-25'] // 禁用 2021-01-01 和 2022-12-25 } } } </script> ``` 在上面的例子中,我们通过将禁用日期以字符串形式放入 disabledDates 数组来指定禁用的日期。 可能会有疑问:为什么要使用 disabled-date 属性来禁用日期?而不是直接在模板中渲染时判断日期是否被禁用? 答:使用 disabled-date 属性可以更灵活地控制哪些日期是禁用的。当需要根据特定条件或逻辑动态决定日期是否可选时,使用 disabled-date 可以提供更好的扩展性和可维护性。另外,在功能复杂的场景下,直接在模板中进行判断可能会导致代码混乱,使用 disabled-date 属性能够更清晰地分离逻辑。 相关问题: 1. el-date-picker 组件还有哪些常用属性? 2. 如何自定义 el-date-picker 的样式? 3. 如何设置 el-date-picker 默认选中的日期? 4. 如何监听 el-date-picker 组件的值变化并触发相应的操作?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值