1. 程式人生 > 程式設計 >vue3.0實現複選框元件的封裝

vue3.0實現複選框元件的封裝

本文例項為大家分享了3.0實現複選框元件封裝的具體程式碼,供大家參考,具體內容如下

大致步驟:

  • 實現元件本身的選中與不選中效果
  • 實現元件的v-model指令
  • 改造成 @vueuse/core 的函式寫法
<!-- 元件基本樣式 -->
<template>
  <div class="xtx-checkbox" @click="changeChecked()">
    <i v-if="checked" class="iconfont icon-checked"></i>
    <i v-else class="iconfont icon-unchecked"></i>
    <span v-if="$slots.default"><slot /></span>
  </div>
</template>

<script>
import { ref } from 'vue'
export default {
  name: 'XtxCheckbox',setup () {
    const checked http://www.cppcns.com
= ref(false) const changeChecked = () => { checked.value = !checked.value } return { checked,changeChecked } } } </script> <style scoped lang="less"> // 樣式可以酌情更改 .xtx-checkbox { display: inline-block; margin-right: 2px; .icon-checked { color: @xtxColor; ~ span { color: @xtxColor; } } i { position: relative; top: 1px; } span { margin-left: 2px; } } </style> // 注:如需全域性使用,需註冊為全域性元件
<!-- 實現v-model指令 -->
... 省略結構
<script>
import { toRef } from 'vue'
export default {
  name: 'XtxCheckbox',props: {
    modelValue: { // v-model預設繫結的值為modelValue
      type: Boolean,default: false
    }
  },setup (props,{ emit }) {
    const checked = toRef(props,'modelValue') // 定義checked儲存接收到的boolean值
    const changeChecked = () => {
      emit('update:modelValue'www.cppcns.com
,!checked.value) // 給使用的父元件傳值,實現複選框的勾選 } return { checked,changeChecked } } } </script> ... 省略樣式
<!-- 基本使用 -->
<!-- 自定義www.cppcns.com複選框測試 -->
<xtx-checkbox v-model="checked">自定義複選框</xtx-checkbox>
<script>
import { ref } from 'vue'
export default {
  name: 'SubCategory',setup () {
    const checked = ref(true)
    return { checked }
  }
}
</script>

vue3.0實現複選框元件的封裝

<!-- @vueuse/core的函式寫法 -->
<template>
  <div class="xtx-checkbox" @click='checked=!checked'>
    <i v-if="checked" class="iconfont icon-checked"></i>
    <i v-else class="iconfont icon-unchecked"></i>
    <span>
      <slot />
    </span>
  </div>
</template>

<script>
import { useVModel } from '@vueuse/core' // 需要 npm i @vueuse/core 或 yarn add @vueuse/core
export default {
  name: 'XtxCheckbox',props: {
    modelValue: {
      type: Boolean,{ emit }) {
    // 獲取CcpPyVTGp父元件傳遞過來的modelValue的值
    const checked = useVModel(props,'modelValue',emit)
    return { checked }
  }
}
</script>


// 使用方法如上
<xtx-checkbox v-model="checked">自定義複選框</xtx-checkbox>
<script>
import { ref } from 'vue'
export default {
  name: 'SubCategory',setup () {
    const checked = ref(true)
    return { checked }
  }
}
</script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。