본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

CheckBox 체크박스

원문 보기 위키 갱신

여러 항목 중에서 원하는 것들을 골라서 선택할 수 있는 체크박스 컴포넌트예요.

출처: 문서

본문

언제 사용하나요

  1. 여러 옵션 가운데서 원하는 항목을 여러 개 선택할 때 사용해요;
  2. 단독으로 사용하면 두 상태 사이를 전환한다는 의미가 되고, 제출 동작과 함께 사용할 수도 있어요.

기본 사용법

:::demo

<template>
  <div class="checkbox-basic-demo">
    <d-checkbox label="Checked" :isShowTitle="false" v-model="checked" />
    <d-checkbox label="Not checked" :isShowTitle="false" v-model="unchecked" />
    <d-checkbox label="Custom title" :isShowTitle="true" title="my title" v-model="unchecked2" />
    <d-checkbox label="No Animation" :isShowTitle="false" v-model="checked2" :showAnimation="false" />
    <d-checkbox label="Disabled" :isShowTitle="false" v-model="checked" :disabled="true" />
    <d-checkbox label="Disabled" :isShowTitle="false" v-model="unchecked" :disabled="true" />
    <d-checkbox label="Half-checked" :isShowTitle="false" :half-checked="halfCheck" v-model="allCheck" @change="onHalfCheckboxChange" />
    <d-checkbox
      label="Half-checked"
      :isShowTitle="false"
      :half-checked="halfCheck"
      v-model="allCheck"
      @change="onHalfCheckboxChange"
      :disabled="true"
    />
    <d-checkbox label="Custom color" :isShowTitle="false" v-model="customCheck" color="RGB(255, 193, 7)" />
    <d-checkbox
      label="Half-checked"
      :isShowTitle="false"
      :half-checked="halfCheck2"
      v-model="allCheck2"
      @change="onHalfCheckboxChange2"
      color="RGB(255, 193, 7)"
    />
    <d-checkbox :isShowTitle="false" v-model="unchecked3">
      <div class="inline-row" style="display: inline-flex">
        <d-select v-model="value1" :options="[1, 2, 3, 4]" size="sm" @click="handleChange"></d-select>
        <span>Custom label template</span>
      </div>
    </d-checkbox>
  </div>
</template>
<script>
import { defineComponent, ref } from 'vue';
export default defineComponent({
  setup() {
    const checked = ref(true);
    const checked2 = ref(true);
    const unchecked = ref(false);
    const unchecked2 = ref(false);
    const unchecked3 = ref(false);
    const halfCheck = ref(true);
    const halfCheck2 = ref(true);
    const allCheck = ref(false);
    const allCheck2 = ref(false);
    const customCheck = ref(true);
    const value1 = ref(null);

    const onHalfCheckboxChange = (value) => {
      halfCheck.value = !allCheck.value;
      console.log('halfCheckbox checked:', value);
    };
    const onHalfCheckboxChange2 = (value) => {
      halfCheck2.value = !allCheck2.value;
      console.log('halfCheckbox checked:', value);
    };
    const handleChange = ($event) => {
      $event.preventDefault();
      $event.stopPropagation();
    };
    return {
      checked,
      checked2,
      unchecked,
      unchecked2,
      unchecked3,
      halfCheck,
      halfCheck2,
      allCheck,
      allCheck2,
      onHalfCheckboxChange,
      customCheck,
      onHalfCheckboxChange2,
      handleChange,
      value1,
    };
  },
});
</script>
<style>
.checkbox-basic-demo .devui-checkbox {
  margin-bottom: 10px;
}

.checkbox-basic-demo .inline-row .devui-select {
  width: 150px;
  margin-right: 10px;
}
</style>

:::

CheckBoxGroup 사용하기

:::demo


<template>
  <div class="checkbox-group-demo">
    <h4 class="title">Input Object Array</h4>
    <d-checkbox-group v-model="values1" :options="options1" direction="row"></d-checkbox-group>

    <h4 class="title">Input String Array</h4>
    <d-checkbox-group v-model="values2" :options="options2" :isShowTitle="false" direction="row"></d-checkbox-group>

    <h4 class="title">Disabled Group</h4>
    <d-checkbox-group v-model="values2" :options="options2" :isShowTitle="false" direction="row" :disabled="true"
    ></d-checkbox-group>

    <h4 class="title">Custom Selected Color</h4>
    <d-checkbox-group
      v-model="values3"
      :options="options3"
      :isShowTitle="false"
      direction="row"
      color="RGB(255, 193, 7)"
    ></d-checkbox-group>

    <h4 class="title">Set showAnimation false</h4>
    <d-checkbox-group v-model="values4" :options="options3" :isShowTitle="false" direction="row" :showAnimation="false"
    ></d-checkbox-group>

    <h4 class="title">Multi-line Checkbox</h4>
    <d-checkbox-group v-model="values5" :options="options5" :isShowTitle="false" direction="row" :itemWidth="94"
    ></d-checkbox-group>

    <h4 class="title">可选项目数量的限制</h4>
    <d-checkbox-group
      v-model="values6"
      :options="options5"
      :isShowTitle="false"
      direction="row"
      :itemWidth="94"
      :max="3"
    ></d-checkbox-group>
    <h4 class="title">插槽方式</h4>
    <d-checkbox-group v-model="values7" :isShowTitle="false" direction="row" :itemWidth="94" :max="3">
      <d-checkbox v-for="item in options1" :key="item.value" :label="item.name" :value="item.value"></d-checkbox>
    </d-checkbox-group>
  </div>
</template>
<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const options1 = ref([
      { name: 'data1', disabled: true, value: '1', id: 1 },
      { name: 'data2', value: '2', id: 2 },
      { name: 'data3', value: '3', id: 3 },
    ]);
    const values1 = ref([{ name: 'data2', value: '2', id: 2 }]);
    const options2 = ref(['data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7']);
    const values2 = ref(['data1', 'data2']);
    const options3 = ref(['data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7']);
    const values3 = ref(['data1', 'data2']);
    const values4 = ref(['data2', 'data3']);
    const options5 = ref([
      'data00000000000000001',
      'data2',
      'data3',
      'data4',
      'data5',
      'data6',
      'data7',
      'data8',
      'data9',
      'data10',
      'data11',
      'data12',
      'data13',
      'data14',
      'data15',
    ]);
    const values5 = ref(['data2', 'data3']);
    const values6 = ref(['data2', 'data3']);
    const values7 = ref(['2', '3']);
    return {
      options1,
      values1,
      options2,
      values2,
      options3,
      values3,
      values4,
      options5,
      values5,
      values6,
      values7,
    };
  },
});
</script>
<style>
.checkbox-group-demo .title {
  margin: 20px 0;
}
</style>

:::

크기와 테두리

:::demo


<template>
  <h4>Small</h4>
  <d-checkbox-group v-model="borderSizeValues1" :options="borderSizeOptions1" direction="row" size="sm" border
  ></d-checkbox-group>

  <h4>Middle</h4>
  <d-checkbox-group v-model="borderSizeValues2" :options="borderSizeOptions1" direction="row" size="md" border
  ></d-checkbox-group>

  <h4>Large</h4>
  <d-checkbox-group v-model="borderSizeValues3" :options="borderSizeOptions1" direction="row" size="lg" border
  ></d-checkbox-group>
</template>
<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const borderSizeOptions1 = ref([
      { name: 'Summer', value: '1', id: 1 },
      { name: 'Spring', disabled: true, value: '2', id: 2 },
    ]);
    const borderSizeValues1 = ref([{ name: 'Summer', value: '1', id: 1 }]);
    const borderSizeValues2 = ref([{ name: 'Summer', value: '1', id: 1 }]);
    const borderSizeValues3 = ref([{ name: 'Summer', value: '1', id: 1 }]);

    return {
      borderSizeValues1,
      borderSizeValues2,
      borderSizeValues3,
      borderSizeOptions1,
    };
  },
});
</script>

:::

버튼 형태

d-checkbox를 d-checkbox-button으로 바꾸기만 하면 돼요. 배열 소스는 일반 배열이나 객체 배열 등 어떤 것이든 쓸 수 있어요.

:::demo


<template>
  <h4>禁用</h4>
  <d-checkbox-group v-model="buttonValues1" size="sm" direction="row">
    <d-checkbox-button
      v-for="item in buttonOptions1"
      :label="item.label"
      :value="item.value"
      :key="item.value"
      :disabled="item.disabled"
    >
    </d-checkbox-button>
  </d-checkbox-group>

  <h4>默认</h4>
  <d-checkbox-group v-model="buttonValues2" direction="row">
    <d-checkbox-button v-for="item in buttonOptions1" :label="item.label" :value="item.value" :key="item.value"
    ></d-checkbox-button>
  </d-checkbox-group>

  <h4>自定义填充颜色、文字颜色</h4>
  <d-checkbox-group v-model="buttonValues3" size="lg" is-show-title color="#FA9841" text-color="#fff" direction="row">
    <d-checkbox-button
      v-for="item in buttonOptions1"
      :label="item.label"
      :value="item.value"
      :key="item.value"
      :title="item.title"
    >
    </d-checkbox-button>
  </d-checkbox-group>
</template>
<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const buttonOptions1 = ref([
      { label: '选项1', disabled: true, value: 2, id: 1, title: '自定义title1' },
      { label: '选项2', value: 3, id: 2, title: '自定义title2' },
      { label: '选项3', value: 4, id: 3, title: '自定义title3' },
    ]);
    const buttonValues1 = ref([2]);
    const buttonValues2 = ref([2]);
    const buttonValues3 = ref([2]);

    return {
      buttonValues1,
      buttonValues2,
      buttonValues3,
      buttonOptions1,
    };
  },
});
</script>

:::

checkbox 조건에 따라 상태 전환 막기

조건을 판단해서, label이 '조건 판단 콜백으로 선택 금지'에 해당하는 checkbox는 상태 전환을 멈춰요. :::demo


<template>
  <div style="margin-bottom: 10px">
    <d-checkbox
      label="Conditional Callback Allowed"
      :isShowTitle="false"
      v-model="checkboxChecked1"
      @change="onCheckboxEndChange"
      :beforeChange="endBeforeChange"
    />
  </div>
  <div>
    <d-checkbox
      label="Conditional Judgment Callback Interception Selected"
      :isShowTitle="false"
      v-model="checkboxChecked2"
      @change="onCheckboxEndChange"
      :beforeChange="endBeforeChange"
    />
  </div>
</template>
<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const checkboxChecked1 = ref(true);
    const checkboxChecked2 = ref(false);

    const onCheckboxEndChange = (value) => {
      console.log('checkbox1 checked:', value);
    };

    const endBeforeChange = (isChecked, label) => {
      return label === 'Conditional Callback Allowed';
    };
    return {
      checkboxChecked1,
      checkboxChecked2,
      onCheckboxEndChange,
      endBeforeChange,
    };
  },
});
</script>

:::

checkbox-group 조건에 따라 상태 전환 막기

옵션에 'intercept'(차단) 문자열이 포함된 checkbox는 상태를 전환할 수 없어요. :::demo


<template>
  <div>
    <d-checkbox-group
      v-model="interceptValues"
      :options="interceptOptions"
      :isShowTitle="false"
      direction="row"
      @change="onCheckboxInterceptChange"
      :beforeChange="interceptBeforeChange"
    />
  </div>
</template>
<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const interceptOptions = ref(['data1', 'data2', 'intercept', 'intercept2', 'data5', 'data6', 'data7']);
    const interceptValues = ref(['data2', 'intercept']);
    const onCheckboxInterceptChange = (value) => {
      console.log('checkbox1 checked:', value);
    };

    const interceptBeforeChange = (isChecked, label) => {
      return !label.includes('intercept');
    };

    return {
      interceptOptions,
      interceptValues,
      onCheckboxInterceptChange,
      interceptBeforeChange,
    };
  },
});
</script>

:::

Checkbox 파라미터

파라미터 타입 기본값 설명 Demo 링크
name string -- 선택, 폼 도메인명. input 네이티브 name 속성 기본 사용법
label string -- 선택, 라벨 표시 기본 사용법
value string|number -- 선택, 선택 상태의 값(checkbox-group이거나 바인딩 객체가 array일 때만 유효) CheckBoxGroup 사용
half-checked boolean false 선택, 반선택 상태 기본 사용법
is-show-title boolean true 선택, title 힌트 표시 여부.
기본값은 파라미터 label의 값 표시
기본 사용법
title string -- 선택, 커스텀 title 힌트 콘텐츠 표시 기본 사용법
color string -- 선택, 체크박스 색상 기본 사용법
show-animation boolean true 선택, 애니메이션 표시 제어 기본 사용법
disabled boolean false 선택, 비활성화 여부 기본 사용법
before-change Function|Promise<boolean> -- 선택, checkbox 전환 전 콜백 함수.
boolean을 반환하며, false를 반환하면 checkbox 전환을 막을 수 있음
기본 사용법
size ICheckboxSize md 선택, checkbox 크기. border 속성이 있을 때만 유효 크기
border boolean false 선택, 테두리 여부 테두리
show-glow-style boolean true 선택, 호버 발광 효과 표시 여부

Checkbox 이벤트

이벤트 설명 Demo 링크
change 체크박스 값 변경 시 발생하는 이벤트. 값은 현재 상태 기본 사용법

CheckboxGroup 파라미터

파라미터 타입 기본값 설명 Demo 링크
name string -- 선택, 폼 도메인명. input 네이티브 name 속성 CheckBoxGroup 사용
direction 'row' | 'column' 'column' 선택, 표시 방향 CheckBoxGroup 사용
item-width number -- 선택, 각 checkbox 항목의 너비(px) CheckBoxGroup 사용
options array [] 선택, 체크박스 옵션 배열 CheckBoxGroup 사용
half-checked boolean false 선택, 반선택 상태 CheckBoxGroup 사용
is-show-title boolean true 선택, title 힌트 표시 여부.
기본값은 파라미터 label의 값 표시
CheckBoxGroup 사용
color string -- 선택, 체크박스 색상 CheckBoxGroup 사용
show-animation boolean true 선택, 애니메이션 표시 제어. 버튼 형태에서는 사용 불가 CheckBoxGroup 사용
disabled boolean false 선택, 비활성화 여부 CheckBoxGroup 사용
max number -- 선택, 체크 가능한 checkbox 최대 개수 CheckBoxGroup 사용
before-change Function|
Promise<boolean>
-- 선택, checkbox 전환 전 콜백 함수.
false를 반환하면 checkbox 전환을 막을 수 있음
CheckBoxGroup 사용
size ICheckboxSize md 선택, checkbox 크기. border 속성이 있을 때만 유효 크기
border boolean false 선택, 테두리 여부 테두리
text-color string -- 선택, 버튼 선택 시 폰트 스타일. 버튼 형태에서만 존재 버튼 형태

CheckboxGroup 이벤트

이벤트 설명 Demo 링크
change checkbox 값 변경 이벤트 change 이벤트 사용

CheckboxButton 파라미터

파라미터 타입 기본값 설명 Demo 링크
name string -- 선택, 폼 도메인명. input 네이티브 name 속성 버튼 형태
label string -- 선택, 라벨 표시 버튼 형태
value string|number -- 선택, 선택 상태의 값(checkbox-group이거나 바인딩 객체가 array일 때만 유효) 버튼 형태
is-show-title boolean true 선택, title 힌트 표시 여부.
기본값은 파라미터 label의 값 표시
버튼 형태
title string -- 선택, 커스텀 title 힌트 콘텐츠 표시 버튼 형태
disabled boolean false 선택, 비활성화 여부 버튼 형태
before-change Function|Promise<boolean> -- 선택, checkbox 전환 전 콜백 함수.
boolean을 반환하며, false를 반환하면 checkbox 전환을 막을 수 있음
버튼 형태
size ICheckboxSize md 선택, checkbox 크기 버튼 형태

Checkbox 타입 정의

ICheckboxSize

type ICheckboxSize = 'lg' | 'md' | 'sm';

더 알아보기 (Learn more)

d-checkbox와 d-checkbox-group을 조합하면 여러 개 선택 폼을 손쉽게 만들 수 있어요. 더 자세한 내용은 DevUI 공식 문서를 참고해 보세요.