uniapp 卡片勾选

这篇具有很好参考价值的文章主要介绍了uniapp 卡片勾选。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

公司的app项目使用的uniapp,项目里有一个可勾选的卡片功能,效果图如下:
uniapp 卡片勾选,vue基础,uni-app,javascript,前端
找了一圈没找到什么太好的组件,于是就自己简单写了一个,记录一下。避免以后还会用到

代码

<template>
	<view class="card-selection">
		<checkbox-group ="checkboxChange">
			<view v-for="(item, index) in checkboxList" :key="index">
				<!-- 顶部标题部分 -->
				<slot name="header" :row="item" :rowIndex="index"></slot>
				<label>
					<view v-if="item.checkboxShow" class="card-selection-item" :style="itemStyle">
						<!-- 左侧复选框 -->
						<view class="item1">
							<checkbox :value="item[rowKey]" :disabled="item.checkboxDisabled"
								:checked="item.checkboxChecked" />
						</view>
						<!-- 右侧自定义插槽内容 -->
						<view class="item2">
							<slot name="default" :row="item"></slot>
						</view>
					</view>
				</label>
			</view>
		</checkbox-group>
	</view>
</template>

<script>
	export default {
		props: {
			// 唯一值
			rowKey: {
				type: String,
				default: 'id'
			},
			// 样式
			itemStyle: {
				type: String,
				default: ''
			}
		},
		data() {
			return {
				// 列表
				checkboxList: [],
				// 记录已经勾选了的数据
				hasCheckedList: []
			}
		},
		methods: {
			// 初始化
			init(list) {
				this.checkboxList = []
				// 添加选中、禁用、是否显示等属性
				list.forEach(item => {
					item.checkboxChecked = false
					item.checkboxDisabled = false
					item.checkboxShow = true
					this.checkboxList.push(item)
				})
			},
			// 复选框勾选
			checkboxChange(e) {
				this.hasCheckedList = e?.detail?.value || []
				//console.log("复选框勾选数据:", this.hasCheckedList)
				// 返回给父组件勾选的值
				const checkedList = this.checkboxList.filter(item => this.hasCheckedList.includes(item[this.rowKey]))
				// 修改被勾选的数据的checkboxChecked
				this.checkboxList.forEach(item => {
					item.checkboxChecked = this.hasCheckedList.includes(item[this.rowKey])
				})
				//console.log("数据列表:",this.checkboxList)
				this.$emit('checkboxChange', {
					checkedValueList: this.hasCheckedList,
					checkedList: checkedList
				})
				console.log("复选框勾选数据:", {
					checkedValueList: this.hasCheckedList,
					checkedList: checkedList
				})
			},
			// 复选框禁用逻辑
			checkboxDisabled(callback) {
				this.checkboxList.forEach(item => {
					item.checkboxDisabled = Boolean(callback(item))
				})
			},
			// 复选框勾选逻辑
			checkboxCheckd(callback) {
				this.checkboxList.forEach(item => {
					//console.log("复选框勾选:", item, callback(item))
					item.checkboxChecked = Boolean(callback(item))
				})
				// 自动勾选不会触发checkboxChange事件,这里需要手动更新
				let valueList = this.checkboxList.filter(item => item.checkboxChecked).map(item => item[this.rowKey])
				this.checkboxChange({
					detail:{
						value:valueList
					}
				})
				this.$forceUpdate()
			},
			// 清空勾选
			clearChecked() {
				this.checkboxList.forEach(item => {
					item.checkboxChecked = false
				})
				// 自动勾选不会触发checkboxChange事件,这里需要手动更新
				let valueList = this.checkboxList.filter(item => item.checkboxChecked).map(item => item[this.rowKey])
				this.checkboxChange({
					detail:{
						value:valueList
					}
				})
			},
			// 清空禁用
			clearDisabled() {
				this.checkboxList.forEach(item => {
					item.checkboxDisabled = false
				})
			},
			// 控制数据的显示和隐藏,用于可能出现数据筛选的情况
			showCheckboxData(callback) {
				this.checkboxList.forEach(item => {
					item.checkboxShow = Boolean(callback(item))
				})
			}
		},
	}
</script>

<style lang="scss" scoped>
	.card-selection-item {
		padding: 10px;
		display: flex;

		.item1 {
			width: 30px;
			height: 30px;
			flex-shrink: 0;
		}

		.item2 {
			flex-shrink: 1;
			width: 100%;
		}
	}
</style>

没啥复杂的代码,看一下代码就能知道如何使用。效果图如下:
uniapp 卡片勾选,vue基础,uni-app,javascript,前端文章来源地址https://www.toymoban.com/news/detail-847409.html

到了这里,关于uniapp 卡片勾选的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

    最近得空学习了下uniapp结合vue3搭建跨端项目。之前也有使用uniapp开发过几款聊天/仿抖音/后台管理等项目,但都是基于vue2开发。随着vite.js破局出圈,越来越多的项目偏向于vue3开发,就想着uniapp搭配vite4.x构建项目效果会如何?经过一番尝试果然真香~ uniapp官网提供了  HBuild

    2024年02月09日
    浏览(68)
  • uniapp 卡片勾选

    公司的app项目使用的uniapp,项目里有一个可勾选的卡片功能,效果图如下: 找了一圈没找到什么太好的组件,于是就自己简单写了一个,记录一下。避免以后还会用到 没啥复杂的代码,看一下代码就能知道如何使用。效果图如下:

    2024年04月11日
    浏览(20)
  • (小程序)基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

    版本信息: 点击编辑器的文件 新建 项目(快捷键Ctrl+N) 2.选择uni-app项目,输入项目名/路径,选择项目模板,勾选vue3版本,点击创建,即可成功创建。 3.点击编辑器的运行 运行到浏览器 选择浏览器 当然也可以运行到手机或模拟器、运行到小程序工具。 到这里一个简单的

    2024年02月16日
    浏览(79)
  • 『UniApp』uni-app-打包成App

    大家好,我是 BNTang, 在上一节文章中,我给大家详细的介绍了如何将我开发好的项目打包为微信小程序并且发布到微信小程序商店 趁热打铁,在来一篇文章,给大家详细的介绍如何将项目打包成APP。 打包 App 也是一样的,首先需要配置关于 App 应用的基础信息,打开 manifest

    2024年02月04日
    浏览(77)
  • 【UniApp】-uni-app-网络请求

    经过上个章节的介绍,大家可以了解到 uni-app-pinia存储数据的基本使用方法 那本章节来给大家介绍一下 uni-app-网络请求 的基本使用方法 首先我们打开官方文档,我先带着大家看一下官方文档的介绍:https://uniapp.dcloud.net.cn/api/request/request.html 从官方文档中我们可以看到,可以

    2024年02月04日
    浏览(41)
  • 在 WebStorm 中开发 uni-app - 用vue2实现手机APP(apk) + 微信小程序项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2024年02月05日
    浏览(77)
  • 在 WebStorm 中开发 uni-app - 用vue2实现手机APP(apk) + 微信小程序项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2023年04月15日
    浏览(56)
  • 【UniApp】-uni-app-打包成网页

    经过上一篇文章的介绍,已经将这个计算器的计算功能实现了,接下来就是我们项目当中的一个发包上线阶段,我模拟一下,目的就是为了给大家介绍一下,uni-app是如何打包成网页的。 除了可以打包成网页,uni-app还可以打包成小程序、App、H5、快应用等等,后面在单独开文

    2024年02月04日
    浏览(60)
  • WebStorm开发uni-app ,用vue2实现手机APP(apk) + 微信小程序多端项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2024年02月11日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包