uni-app 自定义下拉选择列表

2023-11-04

效果图:

1.自定义组件ChoiceSelected.vue

2.组件代码:

<template name="ChoiceSelected">
    <!-- 自定义下拉选择框 start-->
    <view class="selected-all">
        <view :class="isShowChoice ? 'drop-down-box-selected' : 'drop-down-box'" @click="btnShowHideClick">
            <text class="dropdown-content">{{choiceContent}}</text>
            <view>
                <image class="dropdown-icon" src="../static/bottom_jiantou.png" mode="widthFix"></image>
            </view>
        </view>
        <!-- 弹框内容 -->
        <view class="dialog-view" v-if="isShowChoice">
            <text :class="choiceIndex ==index ?'dialog-title-selected':'dialog-title'"
                v-for="(item ,index) in choiceList" @click="btnChoiceClick(index)">{{item.choiceItemContent}}</text>
        </view>
    </view>
    <!-- 自定义下拉选择框 end -->
</template>

<script>
    export default {
        name: "ChoiceSelected",
        data() {
            return {
                isShowChoice: false
            };
        },
        props: {
            choiceIndex: {},
            choiceList: {},
            choiceContent: {}
        },
        methods: {
            // 选择
            btnChoiceClick: function(position) {
                var _this = this
                // _this.choiceIndex = position
                _this.isShowChoice = false
                // _this.choiceContent = _this.choiceList[position].choiceItemContent
                _this.$emit("onChoiceClick",position)
            },
            // 显示与隐藏选择内容
            btnShowHideClick: function() {
                var _this = this
                if (_this.isShowChoice) {
                    _this.isShowChoice = false
                } else {
                    _this.isShowChoice = true
                }
            },
        }
    }
</script>

<style>
    /* end */
    .dialog-title-selected {
        color: white;
        font-size: 30rpx;
        padding-left: 20rpx;
        padding-top: 6rpx;
        padding-bottom: 6rpx;
        padding-right: 15rpx;
        background-color: #55ffff;
    }

    .dialog-title {
        color: black;
        font-size: 30rpx;
        padding-left: 20rpx;
        padding-top: 6rpx;
        padding-bottom: 6rpx;
        padding-right: 15rpx;
        background-color: white;
    }

    .dialog-view {
        display: flex;
        flex-direction: column;
        justify-content: center;
        width: 100%;
        border: 2rpx solid #F0AD4E;
        box-sizing: border-box;
    }

    .dropdown-icon {
        width: 30rpx;
        height: 30rpx;
        margin-left: 15rpx;
        margin-right: 20rpx;
    }

    .dropdown-content {
        color: black;
        font-size: 30rpx;
        padding-left: 20rpx;
        padding-top: 5rpx;
        padding-bottom: 5rpx;
        flex-grow: 1;
    }

    .drop-down-box-selected {
        display: flex;
        flex-direction: row;
        align-items: center;
        min-height: 60rpx;
        width: 100%;
        border: 2rpx solid #F0AD4E;
        box-sizing: border-box;
    }

    .drop-down-box {
        display: flex;
        flex-direction: row;
        align-items: center;
        min-height: 60rpx;
        width: 100%;
        border: 2rpx solid gray;
        border-radius: 5rpx;
        box-sizing: border-box;
    }

    .selected-all {
        display: flex;
        flex-direction: column;
        justify-content: center;
        width: 100%;
    }

    /* start */
</style>
 

3.调用与注册组件

子组件中参数传递的方法

 在子组件中的_this.$emit("onChoiceClick",position)必须与父vue中@调用名称一致。

 参数说明:

属性 默认值/类型 说明
isShowChoice false/boolean 是否显示下拉类表数据
choiceIndex 0/int 下拉类表数据,选择位置
choiceContent “请选择”/String 选择的内容
choiceList 自定义/数组 下拉类表数据

4.父vue的代码:

<template>
    <view class="content">
        <view class="selected-view">
            <choice-selected :choiceContent="choiceContent" :choiceIndex="choiceIndex" :choiceList="choiceList"
                @onChoiceClick="onChoiceClick"></choice-selected>
        </view>
    </view>
</template>

<script>
    import choiceSelected from '../../components/ChoiceSelected.vue'
    export default {
        components: {
            choiceSelected
        },
        data() {
            return {
                choiceList: [{
                        choiceItemId: "0",
                        choiceItemContent: "请选择"
                    },
                    {
                        choiceItemId: "P",
                        choiceItemContent: "苹果"
                    },
                    {
                        choiceItemId: "L",
                        choiceItemContent: "荔枝"
                    },
                    {
                        choiceItemId: "X",
                        choiceItemContent: "西瓜"
                    },
                    {
                        choiceItemId: "H",
                        choiceItemContent: "哈密瓜"
                    }
                ],
                choiceContent: "请选择", //选择的内容
                choiceIndex: 0 //选择位置
            }
        },
        methods: {
            // 修改选择的数据
            onChoiceClick: function(position) {
                console.log("+++++++" + position)
                var _this = this
                _this.choiceIndex = position
                _this.choiceContent = _this.choiceList[position].choiceItemContent
            },

        }
    }
</script>

<style>
    .selected-view {
        width: 80%;
        margin-top: 15rpx;
    }

    .content {
        display: flex;
        flex-direction: column;
        align-items: center;
        width: 100%;
        height: 100%;
        background-color: white;
    }

    page {
        height: 100%;
        background-color: white;
    }
</style>
 

Demo

以上就是完成自定义下拉列表组件的所有代码,有什么问题或需要改进的可以留言共同探讨...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uni-app 自定义下拉选择列表 的相关文章

  • 如何设置vite.config.js基本公共路径?

    我正在尝试设置一个base url对于我的开发和生产环境 但是vitejs配置未解决 根据vitejs https vitejs dev config 您可以在配置选项中设置在开发或生产中提供服务时的基本公共路径 当从命令行运行 vite
  • 如何判断何时创建新组件?

    我一直在寻找背后的逻辑当有人在 AngularJS Angular 上的 Web 应用程序中创建新组件时但我认为这更通用 可能适用于所有基于组件的前端框架 我知道有像这样的一些原则应该是抽象的和可重用的但例如我在角度文档中看到 每个单独的路
  • 从 vue 子组件获取数据并绑定到父组件中的对象

  • 访问 nuxt 配置文件中的存储

    我想添加通过 Nuxt 静态生成的动态路由 我定义了一个客户端 服务器端存储asyncData方法 我想将这个存储值 一个数组 映射到我的nuxt config js文件使其成为 动态 静态 路线图nuxt generate命令 但如何访问
  • 如何在Vue.js中格式化当前日期格式

    我需要获取当前日期Vue js 为此 我使用了以下方法 today date new Date toJSON slice 0 10 replace g today date将给出日期2019 09 11格式 有什么方法可以自定义这种格式吗
  • 监听来自动态vue组件的事件

    您将如何侦听动态创建的组件实例发出的事件 在示例中 顶部组件添加到 DOM 中 而第二个组件是在 javascript 中动态创建的 Vue component button counter data function return cou
  • 如何在 vuelidate 验证中使用条件运算符?

    我刚刚安装维埃利达特 https www npmjs com package vuelidate 并创建了一个助手来检查该值是否为phone no 参考 https vuelidate js org sub list of helpers
  • vuejs 模板和 asp.net 部分视图,好的做法吗?

    我在网站中使用 Vue js 并将模板添加到 html 代码中 并将 js 代码添加到单个 js 文件中 所以我不想使用 vue Vuefy Browserfy 方法 而是稍后捆绑并缩小我的 js 文件 由于我必须使用 Asp Net MV
  • vue如何设置嵌套对象的默认道具

    我的道具是这样的 house kitchen sink 我尝试过类似的事情 但没有成功 props house type Object default gt kitchen sink 如何为此类对象设置默认道具 来自文档 对象或数组默认值必
  • Vue 开发样板中的随机错误“以太坊未定义”

    我正在尝试使用 vue cli 创建的 Vue 基本样板在一个非常基本的 Vue3 组件中实现 web3 但我有一些奇怪的错误 首先 这是我的组件的代码
  • 使用 Nuxt 动态获取并编译模板

    我想从远程获取 svg 并通过编译使其栩栩如生 对于 赋予生命 我的意思是按类选择其中一些元素 并动态地将组件列表附加到其中 现在我只是使用 div div 我的组件如下所示 data return svg async created le
  • 如何为 VueJS 组件创建 v-model 修饰符?

    在VueJS中有一些v model修改预解析绑定值 例如v model trim从字符串中删除空格 如何创建自己的修改器 例如v model myparse今天嗯使用类似的东西 computed name get function retu
  • Vue SPA - 如何在浏览器中呈现时隐藏 .vue 文件

    我正在开发一个用 Vue js 开发的单页应用程序 托管在 Node js 服务器上 目前它仍在开发中 但最终将暴露给外部客户 并且由于我们将处理敏感数据 我们希望避免在用户检查元素时看到 vue 文件和相对文件树结构在开发工具中 See
  • 如何销毁/卸载 vue.js 3 组件?

    我有一个相当大的vue js 2具有动态选项卡机制的应用程序 用户可以与应用程序打开和关闭选项卡进行交互 每个选项卡代表一条路线 为了实现这一点 我使用 vue router 并保持活动状态 如下例所示
  • 如何居中对齐表格 - PDFMAKE

    我可以使用 PDFMAKE 创建一张居中对齐 页面 的表格吗 已定义的对齐方式 样式中的 center 和标签表内的 table width auto body text PER ODO style tableHeader text VOL
  • 如何在没有 API 请求的情况下使用 Nuxt.js 生成 100% 静态网站?

    我正在测试周围Nuxt js https nuxtjs org 生成静态网站 使用API 获取数据时是否可以生成100 静态站点 从而摆脱API和请求 根据我到目前为止的测试 所有文件都已正确生成并托管在Github 页面 https pa
  • 将变量从调用它的父页面传递给 Vue 组件

    我有一个简单的表格 显示了我的所有数据 主文件 php table class table table bordered table hover thead tr th Job Name th th Job Description th t
  • 在 Vue.js 2.0 中实现 v-model 格式化的正确方法是什么

    举个简单的例子 输入货币数据的文本框 要求是以 1 234 567 格式显示用户输入并删除小数点 我尝试过 vue 指令 当 UI 由于其他控件而刷新时 不会调用指令的 update 方法 因此文本框中的值将恢复为没有任何格式的值 我还尝试
  • 我应该如何处理 Vuex 中的事件?

    我习惯使用全局事件总线来处理跨组件方法 例如 var bus new Vue Component A bus emit DoSomethingInComponentB Component B bus on DoSomethingInComp
  • 使用 jquery-chosen 插件更新 vuejs 模型值

    尝试使用jquery 选择 http harvesthq github io chosen 使用 vue 问题是这个插件隐藏了我应用的实际选择v model 所以当我选择一个值时 vue 不会将其识别为选择更改事件 并且模型值不会更新 当我

随机推荐

  • Tomcat安装配置全解

    棒棒有言 也许我一直照着别人的方向飞 可是这次 我想要用我的方式飞翔一次 人生 既要淡 又要有味 凡事不必太在意 一切随缘 缘深多聚聚 缘浅随它去 凡事看淡点看开些 顺其自然 无意于得 就无所谓失 人生 看轻看淡多少 痛苦就远离你多少 本章
  • 基于主机头的多虚拟主机

    vim etc httpd conf d test conf
  • 3.2 ATK-ESP8266 WIFI模块-烧录固件

    ATK ESP8266 WIFI模块 烧录固件 一丶前期准备 1 在某宝买的ESP8266模块 2 烧录模式引脚 IO 0引脚接GND 另外一个不用接 左边四个 正常连接串口即可 3 烧录固件 按照原子哥给的资料 烧写方式有误 在烧录固件
  • 关于主键生成策略的几种方式

    在复杂分布式系统中 往往需要对大量的数据和消息进行唯一标识 如在美团点评的金融 支付 餐饮 酒店 猫眼电影等产品的系统中 数据日渐增长 对数据分库分表后需要有一个唯一ID来标识一条数据或消息 数据库的自增ID显然不能满足需求 特别一点的如订
  • GDB调试精粹及使用实例

    GDB调试精粹及使用实例 来源 不详 2006 07 14 11 18 05 一 列文件清单 1 List gdb list line1 line2 二 执行程序 要想运行准备调试的程序 可使用run命令 在它后面可以跟随发给该程序的任何参
  • CLIP解读

    CLIP Learning Transferable Visual Models From Natural Language Supervision OpenAI的CLIP这篇文章 从互联网收集构建了了4亿个图片 文本对的数据集 对图像和文
  • 通俗易懂-SSM三大框架整合案例(SpringMVC+Spring+Mybatis)

    前言 学习B站UP狂神说视频笔记整理视频链接 相关代码已经上传至码云 码云链接 前期准备 项目介绍 demo项目是一个简单的图书管理系统 主要功能为表单数据的增删改查 Web端使用JSP Bootstrap 后端使用SpringMVC Sp
  • 特征筛选11——ExtraTrees筛选特征

    算法简述 ExtraTrees 极度随机树 与随机森林 Random Forest 是一样的 都是决策树的集成模型 区别在于 分叉的方式 随机森林依据Gini或信息熵 ExtraTrees是随机 没错纯随机 随机的特征构建边 随机的阈值来分
  • frp+docker内网穿透安装配置

    frp是一个优秀的内网穿透服务 曾试过用ngrok做内网穿透 但用docker还比较麻烦 还需要自己编译ngrok客户端进行分发才能使用 折腾了一阵子就没搞了 frp早闻大名 趁有空尝试下 还是比较方便的 只需要写好配置文件 启动就完事了
  • Linux下程序开机自启动方法

    Linux下程序开机自启动方法 1 创建目录 用户家目录下的 config下创建autostart目录 home user1 config autostart 2 创建文件 app desktop文件 3 给app desktop文件添加如
  • Illustrator CC 2019 New Features Illustrator CC 2019新功能 Lynda课程中文字幕

    Illustrator CC 2019 New Features 中文字幕 Illustrator CC 2019新功能 中文字幕Illustrator CC 2019 New Features 2019年发布的Adobe Illustra
  • mysql安装error:the security setting could not be applied

    在安装mysql时 出现 The security settings could not be applied to the database because the connection has failed with the follo
  • 多数人都不会用,有了这些视频APP,再也不担心失效!

    阿虚储物间里一大热门下载内容就是影视类APP了 但相信有这类需求的粉丝都知道 这类APP要么你忍受烦人的广告 要么就找去广告版 但去广告版有个最大的问题就是经 常 失 效 其实阿虚早就介绍过不少更稳定的影视APP了 只是可能很多粉丝都没注意
  • QT5下获取本机IP地址、计算机名、网络连接名、MAC地址、子网掩码、广播地址

    获取主机名称 名称 get localmachine name 功能 获取本机机器名称 参数 no 返回 QString QString CafesClient get localmachine name QString machineNa
  • Linux命令·rmdir

    今天学习一下linux中命令 rmdir命令 rmdir是常用的命令 该命令的功能是删除空目录 一个目录被删除之前必须是空的 注意 rm r dir命令可代替rmdir 但是有很大危险性 删除某目录时也必须具有对父目录的写权限 1 命令格式
  • 微信小程序 按住录音的坑 监听录音开始 结束顺序不固定

    问题 按照小程序提供的事件 类型 触发条件 touchstart 手指触摸动作开始 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断 如来电提醒 弹窗 touchend 手指触摸动作结束 tap 手指触摸后马上
  • [LeetCode-69]-Sqrt(根号运算)

    文章目录 题目相关 Solution 1 调用已有的库函数 题目相关 题目解读 原题描述 原题链接 Implement int sqrt int x Compute and return the square root of x where
  • Git如何在不提交当前分支的情况下切换到其它分支进行操作——git stash

    假如现在的Bug你还没有解决 而上边又给你派了一个新的Bug 而这个Bug相比较现在正在苦思冥想的Bug比较容易解决 你想先解决新的Bug 可是之前的Bug还没有解决完而不能提交 怎么办 解决方法 在其他分支上另开炉灶解决 首先你需要将此刻
  • Oracle锁表处理

    1 查出被锁的表 SELECT object name machine s sid s serial FROM gv locked object l dba objects o gv session s WHERE l object id
  • uni-app 自定义下拉选择列表

    效果图 1 自定义组件ChoiceSelected vue 2 组件代码