uniapp实现点击标签文本域中显示标签内容

先上一个效果图

 实现的效果有:

①.点击标签时,标签改变颜色并处于可删除状态

②.切换标签,文本域中出现标签的内容

③.点击标签右上角的删除可删掉标签,同时清除文本域中标签的内容

④.可输入内容,切换时不影响输入的内容

使用的是uniapp+vue3+uVieww-plus

代码:

<template>
	<view class="mt32">
		<u--textarea v-model="textareaValue" placeholder="请输入未通过的原因!" height="200" count maxlength="30" ></u--textarea>
		<view class="mt32 flex flex-wrap justify-center align-items-center align-center">
			<view class="u-page__tag-item" v-for="(item, index) in radios" :key="index">
				<u-tag :show="item.show" shape="circle" :closable="item.closable" :bgColor="item.bgColor" :color="item.color" borderColor="#DCDCDC" :text="item.content" :plain="!item.checked" :name="index"
					@click="radioClick" @close="close(item)">
				</u-tag>
			</view>
		</view>
		<view class="flex justify-center align-items-center">
			<view class="mt32 tjBtn" @click = "submit">提交</view>
		</view>
		
	</view>
</template>

<script setup>
	import {
		reactive,
		ref,
		toRaw,
		onMounted,
		watch,
		computed
	} from 'vue';
	import {
		onLoad,onReady
	} from '@dcloudio/uni-app'
	
	// const textareaValue = ref('')
	const radios = ref([
		{
			checked: true,
			show:true,
			closable:false,
			bgColor: '#ffffff',
			color:'rgba(0, 0, 0, 0.90)',
			content:'商机对接1'
		},
		{
			checked: false,
			show:true,
			closable:false,
			bgColor: '#ffffff',
			color:'rgba(0, 0, 0, 0.90)',
			content:'商机对接2'
		},
		{
			checked: false,
			show:true,
			bgColor: '#ffffff',
			color:'rgba(0, 0, 0, 0.90)',
			content:'商机对接3'
		},
		{
			checked: false,
			show:true,
			closable:false,
			bgColor: '#ffffff',
			color:'rgba(0, 0, 0, 0.90)',
			content:'商机对接4'
		},
		{
			checked: false,
			show:true,
			closable:false,
			bgColor: '#ffffff',
			color:'rgba(0, 0, 0, 0.90)',
			content:'商机对接5'
		},
	])
	const reason1 = ref('');
	
	const reason2 = ref('');
	
	const textareaValue = computed({
	  get: () => reason1.value + reason2.value,
	  set: (value) => {
		for (let i = 0; i < radios.value.length; i++) {
			if (value.includes(radios.value[i].content)) {
			  reason1.value = radios.value[i].content;
			  reason2.value = value.replace(radios.value[i].content, '');
			  return;
			}
		  }
	  }
	})
	
	const radioClick = (name)=> {
		// console.log('radios.value',name)
		radios.value.map((item, index) => {
			if(index === name){
				item.checked = true
				item.bgColor = 'rgba(0, 82, 217, 0.70)'
				item.color = '#ffffff'
				item.closable = true
				reason1.value = item.content
			}else{
				item.checked = false
				item.bgColor = '#ffffff'
				item.color = 'rgba(0, 0, 0, 0.90)'
				item.closable = false
			}
		})
	}
	const close = (item)=>{
		console.log('关闭')
		item.show = false
		reason1.value = ''
	}
	const submit = ()=> {}
</script>

<style>
page{
	background: #F5F5F5;
}
.u-page__tag-item{
	height: auto;
	margin:0 20rpx 20rpx 0;
}
.u-page__tag-item text {
	display: inline-block;
	padding: 18rpx 32rpx;
}
.tjBtn{
	background: #0052D9;
	color: #fff;
	border-radius: 6px;
	padding: 24rpx 118rpx;
}
</style>

 有些样式在全局定义的,自行设置样式。

相关推荐

  1. shiny实现跳转下一个标签

    2024-03-13 07:22:05       43 阅读
  2. three.js工厂动画、标签

    2024-03-13 07:22:05       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 07:22:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 07:22:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 07:22:05       87 阅读
  4. Python语言-面向对象

    2024-03-13 07:22:05       96 阅读

热门阅读

  1. uniapp实现点击选项跳转到应用商店进行下载

    2024-03-13 07:22:05       46 阅读
  2. uniapp 自动更新版本并安装

    2024-03-13 07:22:05       37 阅读
  3. uniapp手机号一键登录

    2024-03-13 07:22:05       33 阅读
  4. 分布式微服务 - 3.降级熔断 - 3.Sentinel

    2024-03-13 07:22:05       40 阅读
  5. C++中箭头运算符重载的细节

    2024-03-13 07:22:05       40 阅读
  6. 【XR806开发板试用】xr806 RTC实验

    2024-03-13 07:22:05       42 阅读
  7. awk命令——显示第2列至最后1列的内容

    2024-03-13 07:22:05       40 阅读
  8. python bug与debug

    2024-03-13 07:22:05       44 阅读
  9. HTML和CSS是前端开发中最基础的两个技术[入门级]

    2024-03-13 07:22:05       43 阅读
  10. 布尔盲注+时间盲注+堆叠注入

    2024-03-13 07:22:05       46 阅读