vue3.0實現複選框元件的封裝
阿新 • • 發佈:2021-09-23
本文例項為大家分享了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>
<!-- @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>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。