微信小程序下拉框组件使用方法

 更新时间:2022年07月11日 11:49:11   作者:qq_36437172  
这篇文章主要为大家详细介绍了微信小程序下拉框组件使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

小程序有时需要使用下拉框选项,通常我会使用 picker 组件实现。pick 组件使用 mode 来区分类别,默认使用普通选择器就行。

除了上述方式,我们也可以通过自定义组件实现,代码如下:

//index.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    propArray: {
      type: Array,
    }
  },
  /**
   * 组件的初始数据
   */
  data: {
    selectShow: false,//初始option不显示
    selectText: "请选择",//初始内容
  },
  /**
   * 组件的方法列表
   */
  methods: {
    //option的显示与否
    selectToggle: function () {
      var nowShow = this.data.selectShow;//获取当前option显示的状态
 
      this.setData({
        selectShow: !nowShow
      })
    },
    //设置内容
    setText: function (e) {
      var nowData = this.properties.propArray;//当前option的数据是引入组件的页面传过来的,所以这里获取数据只有通过this.properties
      var nowIdx = e.target.dataset.index;//当前点击的索引
      var nowText = nowData[nowIdx].text || nowData[nowIdx].value || nowData[nowIdx];//当前点击的内容
      //再次执行动画,注意这里一定,一定,一定是this.animation来使用动画
      this.setData({
        selectShow: false,
        selectText: nowText,
      })
      this.triggerEvent('select', nowData[nowIdx])
    }
  }
})

代码如下:

<view class='ms-content-box'>
    <view class='ms-content' bindtap='selectToggle'>
        <view class='ms-text'>{{selectText}}</view>
         <view class="{{selectShow ? 'icon-up' : 'icon-down'}}"></view>
    </view>
    <view class='ms-options' wx:if="{{selectShow}}">
        <view wx:for="{{propArray}}" data-index="{{index}}" wx:key='index' class='ms-option' bindtap='setText'>{{item.text || item.value || item}}</view>
    </view>
</view>

样式实现:

/* components/single-dropdown-select/index.wxss */
 
.ms-content-box {
  width: 120px;
}
.ms-content {
  border: 1px solid #e2e2e2;
  background: white;
  font-size: 16px;
  position: relative;
  height: 30px;
  line-height: 30px;
}
.ms-text {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  padding: 0 40px 0 6px;
  font-size: 14px;
}
.ms-options {
  background: white;
  width: inherit;
  position: absolute;
  border: 1px solid #e2e2e2;
  border-top: none;
  box-sizing: border-box;
  z-index: 3;
  max-height: 120px;
  overflow: auto;
}
.ms-option {
  height: 30px;
  line-height: 30px;
  border-top: 1px solid #e2e2e2;
  padding: 0 6px;
  text-align: left;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 14px;
}
.ms-item:first-child {
  border-top: none;
}
.icon-right, .icon-down, .icon-up {
  display: inline-block;
  padding-right: 13rpx;
  position: absolute;
  right: 20rpx;
  top: 10rpx;
}
.icon-right::after, .icon-down::after, .icon-up::after {
  content: "";
  display: inline-block;
  position: relative;
  bottom: 2rpx;
  margin-left: 10rpx;
  height: 10px;
  width: 10px;
  border: solid #bbb;
  border-width: 2px 2px 0 0;
}
.icon-right::after {
  -webkit-transform: rotate(45deg);
  transform: rotate(45deg);
}
.icon-down::after {
  bottom: 14rpx;
  -webkit-transform: rotate(135deg);
  transform: rotate(135deg);
}
.icon-up::after {
  bottom: 0rpx;
  -webkit-transform: rotate(-45deg);
  transform: rotate(-45deg);
}

如何使用呢?首先在引用组件的页面,引入组件:

{
  "usingComponents": {
    "single-dropdown-select": "/components/single-dropdown-select/index"
  }
}

在页面中,直接使用 引入的组件,代码如下:

<view>
    <single-dropdown-select prop-array='{{selectArray}}' bind:select='select' />
</view>

同时传入数据和监听子组件向父组件传递的 select 方法。

Page({
  data: {
    selectArray: [{
      "id": "10",
      "value": "会计类"
    }, {
      "id": "21",
      "text": "工程类"
    }, '技术类', {'value': '其他'}]
  },
  select: function(e) {
    console.log(e.detail)
  }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • ECMAScript6中Map映射的基本概念与常用方法

    ECMAScript6中Map映射的基本概念与常用方法

    Map是ES6中新增的数据结构,Map类似于对象,但普通对象的 key 必须是字符串或者数字,而 Map 的 key 可以是任何数据类型,这篇文章主要给大家介绍了关于ECMAScript6中Map映射的基本概念与常用方法,需要的朋友可以参考下
    2021-07-07
  • JS动态增加删除UL节点LI及相关内容示例

    JS动态增加删除UL节点LI及相关内容示例

    这篇文章主要介绍了JS如何动态增加删除UL节点LI及相关内容,需要的朋友可以参考下
    2014-05-05
  • 详解关于微信setData回调函数中的坑

    详解关于微信setData回调函数中的坑

    这篇文章主要介绍了详解关于微信setData回调函数中的坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 详解javascript数组去重问题

    详解javascript数组去重问题

    这篇文章主要介绍了详解javascript数组去重问题,根据面试时做的一道数组去重问题的解题思路整理的,分享给大家。
    2015-11-11
  • 基于aotu.js实现微信自动添加通讯录中的联系人功能

    基于aotu.js实现微信自动添加通讯录中的联系人功能

    这篇文章主要介绍了利用aotu.js实现微信自动添加通讯录中的联系人,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • javascript实现的登陆遮罩效果汇总

    javascript实现的登陆遮罩效果汇总

    小编给大家推荐几款使用Javascript实现的遮罩效果登陆框,其实这种效果是很常见的,在许多互动的社区及其它的一些地方,弹出框应用想当流行,在不妨碍网页运行的情况下,用户可以输入登录信息,实现完美登录。
    2015-11-11
  • setTimeout函数的神奇使用

    setTimeout函数的神奇使用

    setTimeout函数是一个原生的javascript函数。setTimeout函数会在一个指定的延迟时间之后调用一个函数或执行一段指定的代码。它的应用非常广泛,例如我们希望用户在浏览器某个页面一段时间后弹出一个对话框,或者是鼠标点击某个元素后隔几秒钟在删除这个元素。
    2017-02-02
  • 深入浅析js原型链和vue构造函数

    深入浅析js原型链和vue构造函数

    这篇文章主要介绍了js原型链和vue构造函数的相关知识,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-10-10
  • js创建对象的方式总结

    js创建对象的方式总结

    这篇文章主要介绍了js创建对象的方式,实例总结了3种常用的创建对象的方式,非常实用,需要的朋友可以参考下
    2015-01-01
  • 原生js仿jq判断当前浏览器是否为ie,精确到ie6~8

    原生js仿jq判断当前浏览器是否为ie,精确到ie6~8

    这篇文章主要介绍了原生js仿jq判断当前浏览器是否为ie,精确到ie6~8,需要的朋友可以参考下
    2014-08-08

最新评论