vue3.0实现复选框组件的封装

本文实例为大家分享了vue3.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 = 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', !checked.value) // 给使用的父组件传值,实现复选框的勾选

}

return { checked, changeChecked }

}

}

</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>

<!-- @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,

default: false

}

},

setup (props, { emit }) {

// 获取父组件传递过来的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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 vue3.0实现复选框组件的封装 的全部内容, 来源链接: utcz.com/p/239769.html

回到顶部