uniapp-自定义下拉菜单,点击选项绑定数据

这个示例展示了如何使用Vue.js创建一个带有下拉选择功能的输入组件。用户点击后显示下拉菜单,可以选择预定义的选项或者手动输入。组件包括样式设计和事件处理,如切换显示下拉菜单、选择商品等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成展示:

view部分

<template>
	<view class="body">
		<view class="gender">
			<view class="wu" @click="isShow">
				<view class="wuLeft">
					<image src="../../static/92.png"></image>
				</view>
				<view class="wuRight">
					<input type="text" value="" placeholder="选择货物名称" v-model="goods" />
					<!--<ep-select v-model="select" :options="options" @change="change"></ep-select>-->
				</view>
				<view class="jian">
					<image src="../../static/100.png"></image>
				</view>
			</view>
			<view class="dropDown" v-if="goodsShow==1">
				<view class="dropItem" v-for="(item,index) in options" :key="index" @click="selectGoods(index,item)">
					<view class="dropItemLeft">
						<text>{{item.value}}.</text>
					</view>
					<view class="dropItemCenter">
						<text>{{item.label}}</text>
					</view>
					<view class="dropItemRight">
						<image v-if="active==index" src="../../static/true.png" mode=""></image>
					</view>
				</view>
			</view>
		</view>
	</view>
</template>

js部分

<script>
	export default {
		data() {
			return {
				goodsShow: 0,
				goods: '',
				options: [{
						value: "1",
						label: "70A"
					},
					{
						value: "2",
						label: "韩国双龙"
					},
					{
						value: "3",
						label: "改性沥青"
					},
					{
						value: "4",
						label: "高标改性"
					},
					{
						value: "5",
						label: "PG76-22改性"
					},
					{
						value: "6",
						label: "高粘改性"
					},
					{
						value: "7",
						label: "其他(手动填写)",
						disabled: true
					}
				],
			}
		},
		methods: {
			isShow() {
				if (this.goodsShow == 1) {
					this.goodsShow = 0
				} else {
					this.goodsShow = 1
				}
			},
			selectGoods(num, item) {
				if (num == 6) {
					this.goods = ''
					this.goodsShow = 0
				} else {
					this.goods = item.label
					this.goodsShow = 0
				}
				this.active = num
			},
		}
	}
</script>

css部分

<style>
	.wu {
		width: 652rpx;
		/*输入下划线*/
		/* border: 1rpx solid red; */
		height: 90rpx;
		border-bottom: 1rpx solid #D9D9D9;
		display: flex;
		align-items: center;
		margin: 0 auto;
	}

	.wuLeft {
		margin-left: 28rpx;
	}

	.wuRight {
		margin-left: 14rpx;
	}

	.wuLeft>image {
		width: 50rpx;
		height: 50rpx;
	}

	.jian>image {
		width: 50rpx;
		height: 50rpx;
		margin-left: 310rpx;
	}
	.dropDown {
		width: 652rpx;
		height: 442rpx;
		background: #FFFFFF;
		box-shadow: 0px 2px 6px 1px rgba(0, 0, 0, 0.16);
		margin: 0 auto;
		position: absolute;
		top: 100rpx;
		z-index: 999;
		margin-left: 22rpx;
		padding: 18rpx 0rpx;
	}
	
	.dropItem {
		display: flex;
		margin-top: 20rpx;
		/* border: 1rpx solid red; */
		align-items: center;
		height: 40rpx;
	}
	
	.dropItemLeft {
		margin-left: 70rpx;
		font-size: 14px;
		font-family: Alibaba PuHuiTi-Regular, Alibaba PuHuiTi;
		font-weight: 400;
		color: #444448;
	}
	
	.dropItemCenter {
		width: 300rpx;
		height: 40rpx;
		margin-left: 20rpx;
	}
	
	.dropItemRight {
		margin-left: 150rpx;
	}
	
	.dropItemRight>image {
		width: 42rpx;
		height: 42rpx;
	}
</style>

### 回答1: Uniapp中的下拉菜单dropdown是一种常用的UI组件,它可以在页面中创建一个下拉菜单,用户点击菜单按钮后,会弹出一个下拉框,展示菜单选项供用户选择。在Uniapp中,我们可以使用uni-dropdown组件来实现下拉菜单的功能,该组件支持自定义菜单选项、样式和事件处理等功能,非常方便实用。 ### 回答2: 在Uniapp框架中,下拉菜单(dropdown)可以通过引用 `uni-dropdown` 组件来实现。该组件提供了许多属性和方法,可以按照自己的需求自定义和定制下拉菜单的样式和行为。下面我就来深入介绍一下uni-dropdown的用法和特点。 1. 基本用法 首先,在 Vue 文件中引入 `uni-dropdown` 组件。在需要展示下拉菜单的位置(通常是一个按钮)上绑定一个 `@click` 事件,当用户点击该按钮时,触发该事件并显示下拉菜单。同时,在下拉菜单中选择一个选项后,发出一个 `@select` 事件,将选项的值传递给父组件。 举个例子,假设我们有一个按钮,需要展示下拉菜单。我们可以这样写代码: ``` <template> <view> <button @click="showDropdown">选择</button> <uni-dropdown :data="data" v-model="selected" @select="onSelect"></uni-dropdown> </view> </template> <script> import uniDropdown from '@/components/uni-dropdown/uni-dropdown.vue' export default { components: { uniDropdown, }, data() { return { selected: '', data: [ { value: '1', text: '选项1' }, { value: '2', text: '选项2' }, { value: '3', text: '选项3' }, ], } }, methods: { showDropdown() { this.$refs.dropdown.show() }, onSelect(value) { console.log('selected:', value) }, }, } </script> ``` 如上代码所示,我们在按钮上绑定了 `@click` 事件,在下拉菜单组件中绑定了 `:data` 属性和 `v-model` 属性。同时,在下拉菜单组件中监听了 `@select` 事件,在选中选项后调用 `onSelect` 方法。 2. 属性和方法 除了 `data` 和 `v-model` 属性之外,uni-dropdown 还提供了许多其他可定制的属性和方法。下面是它们的一些应用场景和示例代码: (1) `:up="true/false"`:控制下拉菜单的展开方向,上/下(默认为下)。 ``` <uni-dropdown :data="data" :up="true"></uni-dropdown> ``` (2) `:menu-width="100rpx"`:控制下拉菜单的宽度(默认为内容宽度)。 ``` <uni-dropdown :data="data" :menu-width="200rpx"></uni-dropdown> ``` (3) `:menu-height="200rpx"`:控制下拉菜单的高度(默认为自适应高度)。 ``` <uni-dropdown :data="data" :menu-height="300rpx"></uni-dropdown> ``` (4) `:menu-class="menuClass"`:控制下拉菜单的样式(默认为 uni-dropdown-menu)。 ``` <uni-dropdown :data="data" :menu-class="menuClass"></uni-dropdown> ``` (5) `:item-class="itemClass"`:控制下拉菜单选项样式(默认为 uni-dropdown-menu-item)。 ``` <uni-dropdown :data="data" :item-class="itemClass"></uni-dropdown> ``` (6) `ref="dropdown"` 和 `this.$refs.dropdown.show()/hide()`:控制下拉菜单的显隐状态。 ``` <template> <view> <button @click="showDropdown">显示</button> <uni-dropdown :data="data" v-model="selected" ref="dropdown"></uni-dropdown> </view> </template> <script> export default { methods: { showDropdown() { this.$refs.dropdown.show() }, }, } </script> ``` 3. 总结 在 Uniapp 框架中,使用 uni-dropdown 组件可以非常方便地实现下拉菜单的功能。通过绑定属性和方法,我们可以轻松地控制下拉菜单的样式和行为,达到自己的需求。希望这篇文章对你有所帮助。 ### 回答3: Uniapp是一款跨平台的应用开发框架,可以方便地开发出同时兼容Android和iOS的应用程序。在Uniapp开发中,下拉菜单(dropdown)是常见的UI控件之一,用于显示一些可供选择的下拉选项。 在实现下拉菜单dropdown的过程中,一般可以使用两种不同的UI实现方式:一种是使用原生的select标签,另一种则是使用自定义的组件。具体使用哪种方式,可以考虑不同的开发需求和场景。 使用select标签的实现方式非常简单,只需要在模板代码中添加标签即可,如下所示: <template> <select v-model="selectedOption"> <option value="option1">Option 1</option> <option value="option2">Option 2</option> <option value="option3">Option 3</option> </select> </template> 上述代码实现的就是一个基本的下拉菜单,用户可以从选项中选择一项,然后将其值保存在v-model绑定数据中。使用select标签进行下拉菜单的开发,可以节省大量的自定义组件开发时间和精力,适用于一些简单的下拉菜单场景。 而如果需要实现更加复杂的下拉菜单功能,例如增加搜索、滚动分页等功能,则可考虑使用自定义组件的方式。自定义组件的好处在于可以完全自由定制UI样式和交互效果,可以更好地满足各种不同的设计需求。 下面给出一个自定义dropdown组件的代码示例,代码中使用了vant组件库的popup、dropdown-menu、dropdown-item等组件,可以根据具体需求进行定制和修改: <template> <div> <popup v-model="popupVisible" position="bottom" @close="onClosePopup"> <dropdown-menu> <dropdown-item v-for="item in options" :key="item.value" :value="item.value" @click="onItemClick(item)"> {{ item.label }} </dropdown-item> </dropdown-menu> </popup> <input type="text" :placeholder="placeholder" :value="computedText" readonly @click="onInputClick"> </div> </template> <script> import { Popup, DropdownMenu, DropdownItem } from 'vant'; export default { components: { Popup, DropdownMenu, DropdownItem }, props: { options: { type: Array, default: [] }, value: { type: String, default: '' }, placeholder: { type: String, default: '' } }, computed: { computedText() { const selectedOption = this.options.find(item => item.value === this.value); return selectedOption ? selectedOption.label : this.placeholder; } }, data() { return { popupVisible: false } }, methods: { onInputClick() { this.popupVisible = true; }, onClosePopup() { this.popupVisible = false; }, onItemClick(item) { this.popupVisible = false; this.$emit('input', item.value); this.$emit('change', item.value); } } } </script> 上述代码实现了一个常用的下拉菜单组件,可以接收options、value、placeholder等属性,并且支持双向数据绑定。当用户点击输入框时,弹出一个popup层,显示选项列表,用户选择一项后,将其值保存到v-model绑定数据中。同时还可以通过change事件监听选项值的变化,实现更加灵活的交互效果。 综上所述,通过选择适当的实现方式,Uniapp下拉菜单dropdown可以方便地实现各种常见的UI交互效果,给开发者提供了更加便捷、高效的开发体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值