当前位置: 首页 > news >正文

uniapp+vue3全选、全不选 模板

展示图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码

<template><view class="container"><!-- 列表项 --><view v-for="item in listData" :key="item.id" class="list-item" @click="toggleSelection(item.id)"><text>{{ item.name }}</text><text class="checkbox">{{ item.checked ? '✓' : '✗' }}</text></view><!-- 全选按钮 --><view class="select-all" @click="toggleAllSelection"><text>{{ isAllChecked ? '取消全选' : '全选' }}</text></view></view>
</template><script setup>import {reactive,computed} from 'vue';// 响应式列表数据const listData = reactive([{id: 1,name: '选项1',checked: false},{id: 2,name: '选项2',checked: false},{id: 3,name: '选项3',checked: false},]);// 计算属性判断是否全选const isAllChecked = computed(() =>listData.every(item => item.checked));// 切换单个选项状态const toggleSelection = (id) => {const item = listData.find(item => item.id === id);if (item) item.checked = !item.checked;};// 切换全选状态const toggleAllSelection = () => {const newValue = !isAllChecked.value;listData.forEach(item => item.checked = newValue);};
</script><style>.container {padding: 20rpx;}.list-item {display: flex;justify-content: space-between;padding: 20rpx;border-bottom: 1rpx solid #eee;}.checkbox {color: #007AFF;margin-left: 20rpx;}.select-all {margin-top: 40rpx;padding: 30rpx;background: #f0f0f0;text-align: center;border-radius: 10rpx;}
</style>

点击提交按钮,打印所选内容

<template><view class="container"><!-- 列表项(原有代码保持不变) --><view v-for="item in listData" :key="item.id" class="list-item"@click="toggleSelection(item.id)"><text>{{ item.name }}</text><text class="checkbox">{{ item.checked ? '✓' : '✗' }}</text></view><!-- 操作区域 --><view class="action-area"><!-- 全选按钮(原有代码保持不变) --><view class="select-all" @click="toggleAllSelection"><text>{{ isAllChecked ? '取消全选' : '全选' }}</text></view><!-- 新增提交按钮 --><view class="submit-btn" @click="submitSelected"><text>提交选中项</text></view></view></view>
</template><script setup>
// 原有导入保持不变
import { reactive, computed } from 'vue';// 响应式数据(原有数据保持不变)
const listData = reactive([{ id: 1, name: '选项1', checked: false },{ id: 2, name: '选项2', checked: false },{ id: 3, name: '选项3', checked: false },
]);// 计算属性(原有计算属性保持不变)
const isAllChecked = computed(() => listData.every(item => item.checked)
);// 原有方法保持不变
const toggleSelection = (id) => {const item = listData.find(item => item.id === id);if (item) item.checked = !item.checked;
};const toggleAllSelection = () => {const newValue = !isAllChecked.value;listData.forEach(item => item.checked = newValue);
};// 新增提交方法
const submitSelected = () => {// 获取选中项const selectedItems = listData.filter(item => item.checked).map(({ id, name }) => ({ id, name }));// 打印到控制台console.log('当前选中项:', selectedItems);// 如果需要显示提示(可选)uni.showToast({title: `已提交${selectedItems.length}`,icon: 'none'});
};
</script><style>
/* 原有样式保持不变 */
.container {padding: 20rpx;
}.list-item {display: flex;justify-content: space-between;padding: 20rpx;border-bottom: 1rpx solid #eee;
}.checkbox {color: #007AFF;margin-left: 20rpx;
}/* 新增操作区域样式 */
.action-area {margin-top: 40rpx;display: flex;gap: 20rpx;
}.select-all,
.submit-btn {flex: 1;padding: 30rpx;background: #f0f0f0;text-align: center;border-radius: 10rpx;
}/* 提交按钮特殊样式 */
.submit-btn {background: #007AFF;color: white;
}
</style>

相关文章:

  • ArrayList的subList的数据仍是集合
  • 微电网与分布式能源:智能配电技术的场景化落地
  • 面试期间大频率出现的问题
  • App测试小工具
  • 机器学习中的距离度量与优化方法:从曼哈顿距离到梯度下降
  • Linux下使用MTK的SP_Flash_tool刷机工具
  • Java基础第20天-JDBC
  • 案例:陌陌聊天数据分析
  • Apache HTTPD 换行解析漏洞
  • Linux常用命令整理
  • 开源链动2+1模式、AI智能名片与S2B2C商城小程序融合下的社交电商营销新范式
  • 如何在同一个电脑配置多个jdk版本并随意切换
  • Android 接口定义语言 (AIDL)
  • 多模态大语言模型arxiv论文略读(二十一)
  • 数据战略新范式:从中台沉淀到服务觉醒,SQL2API 如何重塑数据价值链条?
  • vscode使用Linux的vi命令改错怎么回退
  • AIDL 中如何传递 Parcelable 对象
  • JVM 概述
  • 基于Java,SpringBoot,Vue,HTML家政服务预约系统设计
  • C语言学习之两个数值交换的算法
  • 建行一季度净利833.51亿同比下降3.99%,营收降5.4%
  • 人社部:一季度全国城镇新增就业308万人,同比增加5万人
  • 绵阳造AI机器狗参与警务工作,演练中辅助民警控制“嫌疑人员”
  • 三大猪企去年净利润同比均较大幅度增长,资产负债率齐降
  • 识味顺德︱顺德菜的醉系列与火滋味
  • 五矿地产:今年要确保债务“不爆雷”、交付“不烂尾”