반응형
https://apollo.primevue.org/uikit/input
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | <template> <div> <div v-for="(item, index) in items" :key="item.id" class="checkbox-item"> <input type="checkbox" :id="item.id" :checked="item.checked" @change="handleChange(item.id, $event.target.checked)" /> <label :for="item.id">{{ item.label }}</label> </div> <div class="selected-list"> <div v-for="(item, index) in selectedItems" :key="item.id" class="selected-item"> <input type="checkbox" :id="'selected-' + item.id" :checked="item.checked" @change="handleSelectedChange(item.id, $event.target.checked)" /> <label :for="'selected-' + item.id">{{ item.label }}</label> </div> </div> </div> </template> <script setup> import { ref, computed } from 'vue'; const items = ref([ { id: 1, label: 'Item 1', checked: false }, { id: 2, label: 'Item 2', checked: false }, { id: 3, label: 'Item 3', checked: false }, ]); const selectedItems = ref([]); const handleChange = (id, checked) => { // `items` 배열에서 선택된 항목의 인덱스를 찾습니다. const itemIndex = items.value.findIndex(item => item.id === id); // `itemIndex`가 -1이 아니면, 즉, 항목이 배열에 존재하면 if (itemIndex !== -1) { items.value[itemIndex].checked = checked; // 해당 항목의 체크 상태를 업데이트합니다. if (checked) { // 체크된 경우, `selectedItems` 배열에 해당 항목을 추가합니다. selectedItems.value.push(items.value[itemIndex]); } else { // 체크 해제된 경우, `selectedItems` 배열에서 해당 항목을 삭제합니다. const selectedIndex = selectedItems.value.findIndex(item => item.id === id); if (selectedIndex !== -1) { selectedItems.value.splice(selectedIndex, 1); } } } }; const handleSelectedChange = (id, checked) => { // `selectedItems` 배열에서 선택된 항목의 인덱스를 찾습니다. const itemIndex = selectedItems.value.findIndex(item => item.id === id); // `itemIndex`가 -1이 아니면, 즉, 항목이 배열에 존재하면 if (itemIndex !== -1) { selectedItems.value[itemIndex].checked = checked; // 해당 항목의 체크 상태를 업데이트합니다. if (!checked) { // 체크 해제된 경우, `selectedItems` 배열에서 해당 항목을 삭제합니다. selectedItems.value.splice(itemIndex, 1); // 원래 `items` 배열에서 해당 항목의 체크 상태를 해제합니다. const originalIndex = items.value.findIndex(item => item.id === id); if (originalIndex !== -1) { items.value[originalIndex].checked = false; } } } }; </script> <style scoped> .checkbox-item { margin-bottom: 5px; } .selected-list { margin-top: 10px; } .selected-item { margin-bottom: 5px; } </style> | cs |
반응형
'vue' 카테고리의 다른 글
quasar flex기준 왼쪽 오른쪽일때 (0) | 2024.08.05 |
---|---|
:class (0) | 2024.08.04 |
레이어팝업 (0) | 2024.08.02 |
방향에 따른 툴팁 tooltip (0) | 2024.08.02 |
클릭시 상단 push (1) | 2024.08.02 |