微信小程序封装自定义van-dropdown-item 下拉选择框

这篇具有很好参考价值的文章主要介绍了微信小程序封装自定义van-dropdown-item 下拉选择框。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.vant weapp虽然给我们提供了van-dropdown-item且美观的组件但是没有插槽无法自定义内容,限制了各位大神的操作,接下来我们先来了解他的使用在去封装自己的自定义

//json
"usingComponents": {
  "van-dropdown-menu": "@vant/weapp/dropdown-menu/index",
  "van-dropdown-item": "@vant/weapp/dropdown-item/index"
}
//html
van-dropdown-menu>
  <van-dropdown-item value="{{ value1 }}" options="{{ option1 }}" />
  <van-dropdown-item value="{{ value2 }}" options="{{ option2 }}" />
</van-dropdown-menu>
Page({
  data: {
    option1: [
      { text: '全部商品', value: 0 },
      { text: '新款商品', value: 1 },
      { text: '活动商品', value: 2 },
    ],
    option2: [
      { text: '默认排序', value: 'a' },
      { text: '好评排序', value: 'b' },
      { text: '销量排序', value: 'c' },
    ],
    value1: 0,
    value2: 'a',
  },
});

微信小程序下拉选择框,微信小程序,javascript,小程序
这是官方自己的效果!
下面来看看我们自己封装的组件
微信小程序下拉选择框,微信小程序,javascript,小程序

2.还能自定义搜索框等等是不是很奈斯!

接下来我们在components目录新建文件夹deopdown-pirck,这样没用页面都能直接使用了需要在j页面son注册文章来源地址https://www.toymoban.com/news/detail-673402.html

// components/deopdown-pirck/index.js
Component({
    /**
     * 组件的属性列表
     */
    properties: {
        index: {
            type: String
        },
        options: {
            type: Array,
            value: []
        }
    },

    /**
     * 组件的初始数据
     */
    data: {
        imgurl: '../../images/mine/downl.png',
        isshow: false, //是否弹层
        height: 812 + 'px',
        value: '',
        title: '',
        indexs: 0,
        optionss: [], //传递过来的
        repoptionss: [] //用于显示过滤的
    },
    created() {
        var res = wx.getSystemInfoSync()
        this.setData({
            height: res.screenHeight + 'px'
        })
    },
    created() {
        console.log(this.properties.options)
    },
    /**
     * 组件的方法列表
     */
    methods: {
        onopent() {
            this.setData({
                isshow: !this.data.isshow
            })
        },
        opselect(e) {
            let {
                id
            } = e.currentTarget.dataset
            let textindex=null
            let datafilter=this.data.optionss
            datafilter.forEach((item,idnex)=>{
                if (item.value == id) {
                    textindex = item.text
                }
            })
            this.setData({
                indexs: id,
                title: textindex,
                isshow: !this.data.isshow
            })
            let index_id = 0
            let fildata = this.data.optionss
            console.log(id,fildata)
            console.log("选择项")
            fildata.forEach((item, index) => {
                if (item.value === id) {
                    index_id = item.value 
                    console.log("检测匹配项",item.value)
                }
            })
            this.triggerEvent('childFun', {
                id: index_id
            }); //通知父组件处理返回的选中数据
        },
        opsoce(){
            this.setData({
                isshow:false
            })
        },
        seachchange(e) {
            this.setData({
                value: e.detail,
            });
            let filtertext = []
            this.data.optionss.forEach((item) => {
                if (item.text.indexOf(e.detail) != -1) {
                    filtertext.push(item)
                }
            })
            this.setData({
                repoptionss: filtertext
            })
        }
    },
    observers: {
        'index,options': function (nn1, nn2) {
            console.log("原始数据")
            console.log(nn1)
            console.log(nn2)
            let indextile = null
            nn2.forEach((item, index) => {
                if (item.value == nn1) {
                    indextile = item.text
                }
            })
            this.setData({
                indexs: nn1,
                optionss: nn2,
                repoptionss: nn2,
                title: indextile
            })
        }
    }
})
<!--components/deopdown-pirck/index.wxml-->
<view class="drow" bindtap="onopent">
    <text>{{title}}</text>
    <image src="{{isshow===true? '../../images/mine/upl.png':'../../images/mine/downl.png'}}" class="imgseze"  style="height: 30rpx;width: 30rpx;"/>
</view>
<view class="pupo" style="min-height:{{height}}" wx:if="{{isshow}}" catchtap="opsoce">
    <van-search value="{{ value }}" placeholder="请输入关键名称" bind:change="seachchange" />
    <view wx:for="{{repoptionss}}" wx:key="{{index}}" class="{{item.value==indexs? 'itemles':'itemle'}}"  data-id="{{item.value}}" bindtap="opselect">
        <text>{{item.text}}</text>
        <image src="../../images/mine/select.png" wx:if="{{item.value==indexs}}" />
    </view>
</view>
/* components/deopdown-pirck/index.wxss */
.drow{
  display: flex;
  align-items: center;
  font-weight: bold;
}
.drow image{
    height: 30rpx;
    width: 30rpx;
    margin-left: 5rpx;
}
.pupo{
    position: absolute;
    width: 100vw;
    background-color: rgba(0,0,0,0.5);
    z-index: 99999;
    left: 0rpx;
    overflow:scroll;
}
.itemle{
    height: 65rpx;
    width: 100vw;
    display: flex;
    align-items: center;
    justify-content: space-between;
    background: white;
    padding: 10rpx 25rpx;
    z-index: 99;
}
.itemles{
    height: 65rpx;
    width: 100vw;
    display: flex;
    align-items: center;
    justify-content: space-between;
    background: white;
    padding: 10rpx 25rpx;
    z-index: 99;
    color: #1eaaa9;
}
.pupo image{
    height: 35rpx;
    width: 40rpx;
    margin-right:55rpx;
}

到了这里,关于微信小程序封装自定义van-dropdown-item 下拉选择框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 完美解决微信小程序van-field left-icon自定义图片

    实现效果:   data中定义:

    2024年02月12日
    浏览(26)
  • uniapp微信小程序自定义封装分段器。

    话不多说先上效果 这里我用的是cil框架 vue3 下面贴代码 组价代码: 父组件使用方法:

    2024年02月04日
    浏览(31)
  • 微信小程序自定义封装picker实现直接显示年月日时分

    效果如入下: 第一步,封装datepicker.js,可放在utils文件夹下。代码如下:   第二步,wxml代码: js代码:

    2024年01月16日
    浏览(37)
  • 微信小程序开发——使用Vant组件库van-dropdown-menu实现下拉列表切换页面内容

    请先根据官网要求安装好vant组件库并引入相关组件 1、思路 在页面中使用hidden属性判断是否选中当前信息,再隐藏其他所有内容,仅显示所选内容。 2、代码 wxml部分 js部分 3、实际效果(view模块中的内容可以根据实际开发调整)

    2024年02月14日
    浏览(31)
  • 微信小程序使用vant时间选择器二次封装成自定义区间时间选择

    目录 1.引入vant组件库 2.wxml页面 3.js页面 1.安装vant # 通过 npm 安装 npm i @vant/weapp -S --production # 通过 yarn 安装 yarn add @vant/weapp --production # 安装 0.x 版本 npm i vant-weapp -S --production 2.将 app.json 中的  \\\"style\\\": \\\"v2\\\"  去除 3.在  project.config.json 里面的 \\\"setting\\\":{ } 里面添加下面的代码 4.构建

    2024年02月17日
    浏览(43)
  • 微信小程序使用van组件Tabbar 标签栏

    (1)打开我们小程序的项目目录,然后打开文件所在的位置。 (2)cmd 窗口初始化 (3)通过 npm 安装vant/weapp (4)安装 miniprogram (5)修改 app.json app.json 中的 “style”: “v2” 去除 (6)修改 project.config.json 开发者工具创建的项目,miniprogramRoot 默认为 miniprogram,package.json 在

    2024年02月06日
    浏览(33)
  • 微信小程序使用van-steps详解

    vant官网代码如下 问题1:官网代码用在小程序上无效果 这里发现小程序的vant包里有 steps 没有step 因此官网写法无效。 解决方法 正确写法如下所示 页面wxml js 最终效果 问题2:steps数组中如何设置其他字段 (1)找到vant的包 (2)找到steps的index.wxml文件 (3)下面红框里是ste

    2024年02月16日
    浏览(28)
  • 【微信小程序】van-uploader实现文件上传

    使用van-uploader和wx.uploadFile实现文件上传,后端使用ThinkPHP。 1、前端代码 json:引入van-uploader wxml:deletedFile是删除文件函数,设置deletable=“{{ true }}” 和在数据中 deletable: true图片右上角会显示删除按钮,在点击删除图标时调用deletedFile函数去处理删除逻辑。beforeRead:是读之前

    2024年02月14日
    浏览(36)
  • 微信小程序整合vantweapp van-field遇到的坑?

    最低基础库版本在 2.9.3 以上时,可以使用简易双向绑定。 但是在双向绑定的时候,发现有一个层级关系 在用户添加地址,和van-popup、van-area结合使用的时候,点击输入框,弹出选择地址的框,此时发现用户仍然可以输入,我就想到了禁用,但是发现禁用会置灰,给用户一种

    2024年02月11日
    浏览(44)
  • 完美解决微信小程序使用复选框van-checkbox无法选中

    由于小程序使用了vant-ui框架,导致checkbox点击无法选中问题   记得定义 checked 默认值   解决办法 : 添加onChange事件,给 checked 做赋值操作。 可以打印看看console.log(e) 选中效果: 取消选中效果:    

    2024年02月12日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包