이 글에서는 다중 선택 상자의 전체 선택 기능 구현과 관련된 문제를 주로 정리한 uniapp에 대한 관련 지식을 제공합니다. 전체 선택 기능을 구현할 수 없는 이유는 체크박스는 동적으로 수정되며, 인터페이스 상태는 실시간으로 변경될 수 있지만 체크박스 그룹의 변경 이벤트는 트리거될 수 없습니다. 모두에게 도움이 되기를 바랍니다.
추천: "uniapp tutorial"
uniapp에 내장된 checkbox
와 checkbox-group
은 실제로 꽤 훌륭하지만 두 가지 문제가 있습니다: checkbox
其实以及checkbox-group
本来挺好的,但是有两个问题:
- 无法依赖其事件实现全选
- 样式固定,难以修改
他们无法实现全选的原因是:
我动态修改checkbox
的checked
字段时,界面上的状态能够实时变化,但是无法触发checkbox-group
的change
事件。意味着无法依赖checkbox-group
管理好已选项。
就是说:我点了全选,界面上看着是全选了。然后此时我取消了其中一个选项,此时触发change事件,但是它反馈给我的已选列表是错的。这是不行的。
所以我自己想了个实现全选多选框的方案。
实现思路
鉴于上面的问题,于是就可以放弃checkbox-group
了,那么,我顺便就放弃了checkbox
,因为我更喜欢radio的圆圈样式。
首先先模拟生成一些数据,方便展示,数据的要点是要有一个字段selected
- 전체 선택을 달성하기 위해 이벤트에 의존할 수 없음
- 스타일이 고정되어 수정이 어렵습니다
를 동적으로 수정합니다. 체크박스
의 checked
필드를 체크하면 인터페이스의 상태가 실시간으로 변경될 수 있지만 change
이벤트가 발생합니다. >checkbox-group을 실행할 수 없습니다. 이는 checkbox-group
을 사용하여 선택한 옵션을 관리할 수 없음을 의미합니다.
즉, 모두 선택을 클릭했는데 인터페이스에서 모두가 선택된 것처럼 보였습니다. 그런 다음 옵션 중 하나를 취소하고 변경 이벤트가 트리거되었지만 나에게 피드백된 선택된 목록이 잘못되었습니다. 이것은 작동하지 않습니다.
그래서 모두 선택 다중 선택 상자를 구현하는 솔루션을 생각해 냈습니다.
구현 아이디어
위의 문제를 고려하여 checkbox-group
을 포기할 수 있는데, 그런데 checkbox
를 포기했습니다. 왜냐하면 나는 원형 스타일의 라디오를 선호하기 때문입니다.
먼저, 쉽게 표시할 수 있도록 일부 데이터를 시뮬레이션하고 생성합니다. 데이터의 핵심은 필드를 선택
하는 것이며 나머지는 원하는 대로 수행할 수 있습니다.
<script> import { reactive } from "vue"; // 模拟的数据对象,要是响应式的 let data = reactive([] as { id: number; text: string; selected: boolean }[]); // 生成数据 for (let i = 0; i < 10; i++) { data.push({ id: i + 5, text: "标题" + i, selected: false, }); }</script>
그런 다음 지도를 사용하여 선택한 데이터 정보를 저장하는 개체가 있습니다.
// 存储已选内容, 因为这个列表是增删很频繁的,所以选用map而不是数组,key对应的是数据的下标。至于value存放什么,完全由自己定 let selected = reactive(new Map<number>());</number>
그런 다음 데이터를 선택하거나 선택 취소하기 위한 옵션 상자 클릭 이벤트가 있어야 합니다.
// 选项框点击事件,参数是数据的下标 function checkbox(index: number) { // 选中的状态下再次点击,即为取消选中 if (data[index].selected) { data[index].selected = false; selected.delete(index); // 然后删除对应key即可 } // 未选中状态下点击 else { data[index].selected = true; selected.set(index, data[index].id); } }
그리고 모두 선택을 위한 클릭 이벤트가 있어야 합니다.
// 全选与反选事件 function allSelect() { // 已经全选情况下,就是反选,全选就说明长度一样 if (selected.size === data.length) { selected.clear(); // 全部清除 data.forEach((element) => { element.selected = false; // 全部不选,就行了 }); } // 还未全选的状态下 else { data.forEach((element, index) => { // 因为可能存在部分已经选择了,所以得先判断是否已存在,不存在才需要添加 if (!selected.has(index)) { selected.set(index, element.id); // key是对应的下标index,而value是可以自定义的 element.selected = true; // 设为选中 } }); } }
사실 위 두 번의 클릭 이벤트는 모두 아주 기본적인 판단과 데이터 추가 및 삭제입니다. 이제 모든 기능을 사용할 수 있습니다. 페이지에 어떻게 쓰여 있는지 살펴보겠습니다.

<template> <!-- 是个多选列表 --> <view> <label> <radio></radio>{{ item.text }} </label> </view> <!-- 全选按钮 --> <label> <radio></radio>全选</label></template>사실 두 세트의 라디오가 있는데, 하나는 데이터를 반복적으로 표시하는 것이고 다른 하나는 모두 선택 버튼입니다.
함께 연결된 완전한 코드:
<template> <!-- 是个多选列表 --> <view> <label> <radio></radio>{{ item.text }} </label> </view> <!-- 全选按钮 --> <label> <radio></radio>全选</label></template><script> import { reactive } from "vue"; // 模拟的数据对象,要是响应式的 let data = reactive([] as { id: number; text: string; selected: boolean }[]); // 生成数据 for (let i = 0; i < 10; i++) { data.push({ id: i + 5, text: "标题" + i, selected: false, }); } // 存储已选内容, 因为这个列表是增删很频繁的,所以选用map而不是数组,key对应的是数据的下标。至于value存放什么,完全由自己定 let selected = reactive(new Map<number, number>()); // 全选与反选事件 function allSelect() { // 已经全选情况下,就是反选,全选就说明长度一样 if (selected.size === data.length) { selected.clear(); // 全部清除 data.forEach((element) => { element.selected = false; // 全部不选,就行了 }); } // 还未全选的状态下 else { data.forEach((element, index) => { // 因为可能存在部分已经选择了,所以得先判断是否已存在,不存在才需要添加 if (!selected.has(index)) { selected.set(index, element.id); // key是对应的下标index,而value是可以自定义的 element.selected = true; // 设为选中 } }); } } // 选项框点击事件,参数是数据的下标 function checkbox(index: number) { // 选中的状态下再次点击,即为取消选中 if (data[index].selected) { data[index].selected = false; selected.delete(index); // 然后删除对应key即可 } // 未选中状态下点击 else { data[index].selected = true; selected.set(index, data[index].id); } }</script><style></style>많은 코드처럼 보이지만 사실은 모두 매우 기본적인 논리적 판단입니다.
최종 효과는 다음과 같습니다. 모두 선택:
위 내용은 uniapp이 다중 선택 상자의 전체 선택 기능을 구현하는 방법을 설명하는 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 모바일 및 웹 플랫폼 용 디버깅 전략, Android Studio, Xcode 및 Chrome DevTools와 같은 도구 및 OS 및 성능 최적화 전반에 걸쳐 일관된 결과를위한 기술을 강조 표시합니다.

이 기사는 HBuilderx, WeChat 개발자 도구 및 Chrome Devtools와 같은 도구에 중점을 둔 UniAPP 개발을위한 디버깅 도구 및 모범 사례에 대해 설명합니다.

이 기사는 여러 플랫폼에서 UniAPP 응용 프로그램에 대한 엔드 투 엔드 테스트에 대해 설명합니다. 테스트 시나리오 정의, Appium 및 Cypress와 같은 도구 선택, 환경 설정, 테스트 작성 및 실행, 결과 분석 및 Integrat을 다룹니다.

이 기사는 장치, 통합, 기능, UI/UX, 성능, 크로스 플랫폼 및 보안 테스트를 포함한 UniAPP 응용 프로그램에 대한 다양한 테스트 유형에 대해 설명합니다. 또한 크로스 플랫폼 호환성을 보장하고 JES와 같은 도구를 권장합니다.

이 기사는 과도한 글로벌 데이터 사용 및 비효율적 인 데이터 바인딩과 같은 UniAPP 개발의 일반적인 성능 방지 방지에 대해 설명하며, 더 나은 앱 성능을 위해 이러한 문제를 식별하고 완화하는 전략을 제공합니다.

이 기사는 프로파일 링 도구를 사용하여 UniAPP의 성능 병목 현상을 식별하고 해결하고 설정, 데이터 분석 및 최적화에 중점을 둡니다.

이 기사는 UNIAPP에서 네트워크 요청을 최적화하고 대기 시간을 줄이고 캐싱 구현 및 모니터링 도구를 사용하여 응용 프로그램 성능을 향상시키는 전략에 대해 설명합니다.

이 기사에서는 압축, 반응 형 디자인, 게으른로드, 캐싱 및 Webp 형식 사용을 통해 웹 성능을 향상시키기 위해 UniAPP의 이미지 최적화에 대해 설명합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
