uni-app自定义多选组件

<!-- 多选组件 -->
<template>
	<view class="">
		<input v-model="selectVal" class="t_a_r" :placeholder="selectClolr" name="input" disabled @tap="visModel"></input>
		<view class="cu-modal bottom-modal" :class="showModel ? 'show':''">
			<view class="cu-dialog">
				<view class="cu-bar bg-white">
					<view class="action text-green" @tap="resultTag">重置</view>
					<view class="action text-blue" @tap="hideModal">确定</view>
				</view>
				<view class="padding-xl" style="display: flex;flex-wrap: wrap;">
					<view class="padding-xs" v-for="(item,index) in tagList" :key="index">
						<view @tap="clickTag(index,tagList)" class='cu-tag round'
						:style="{'background-color': item.status ? '#000000' : '','color': item.status ? '#F2F2F2' : '' }">{{item.name}}</view>
					</view>
				</view>
			</view>
		</view>
	</view>
</template>
<script>
props:{
	selectClolr: { //占位输入框, 字段为提示语
		type: String,
		default: '请选择所需服务'
	},
    tagList: {
        type: Array,
        default: []
    }
},
data () {
	return {
		showModel: false,
		selectVal: ''
	}
},
methods: {
    hideModal () {
		this.showModel = false
	},
	visModel () {
	    if(this.tagList.length == 0) this.getMenuList()
		this.showModel = true
	},
	resultTag () {
		this.tagList.map(item => {
			return item.status = false
		})
		this.selectVal = ''
		this.$emit('closeData',this.tagList)
	},
	clickTag (v,list) {
		list[v].status = !list[v].status
		let name = []
		let code = []
		list.map(item => {
			if(item.status){
				name.push(item.name)
			}
		})
		this.selectVal = name.join(',')
		this.$emit('closeData',this.tagList)
	}
}
</script>

// 这里要注意,个别情况会出现点击后不更新状态,这是因为vue的机制问题,没有深度监听

//this.$forceUpdate() 加上这个 强制vue更新就好

// 本文有引用color-ui的弹窗样式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用uni-app提供的picker组件来实现多省市的功能。具体实现步骤如下: 1. 在页面中引入picker组件,并定义一个数组用于存储已中的省市信息: ``` <template> <view> <view class="picker-wrap"> <picker mode="multiSelector" :value="value" @change="onChange"> <view class="picker">{{provinceList[value[0]].name}} {{cityList[value[1]].name}}</view> <view class="picker">{{provinceList[value[2]].name}} {{cityList[value[3]].name}}</view> </picker> </view> </view> </template> <script> export default { data() { return { value: [0, 0, 0, 0], // 默认中第一个省市 provinceList: [], // 省份列表 cityList: [], // 城市列表 selectedList: [] // 已中的省市列表 } }, mounted() { // 初始化省份列表和城市列表 this.initData() }, methods: { initData() { // 省份列表和城市列表的数据可以通过接口获取 // 这里只是简单地模拟数据 let provinceList = [ {id: 1, name: '北京'}, {id: 2, name: '上海'}, {id: 3, name: '广东'} ] let cityList = [ [{id: 11, name: '北京市'}], [{id: 21, name: '上海市'}], [{id: 31, name: '广州市'}, {id: 32, name: '深圳市'}] ] this.provinceList = provinceList this.cityList = cityList }, onChange(e) { let value = e.detail.value let selectedList = [] selectedList.push(this.provinceList[value[0]].name + ' ' + this.cityList[value[1]].name) selectedList.push(this.provinceList[value[2]].name + ' ' + this.cityList[value[3]].name) this.selectedList = selectedList } } } </script> <style> .picker-wrap { display: flex; justify-content: center; align-items: center; height: 100vh; } .picker { font-size: 16px; color: #333; padding: 10px; } </style> ``` 2. 在mounted钩子函数中初始化省份列表和城市列表的数据。 3. 在onChange方法中获取当前中的省市信息,并将其存储到selectedList数组中。 4. 在页面中展示已中的省市信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值