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>

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

(0)

相关推荐

  • vue基于element-ui的三级CheckBox复选框功能的实现代码

    最近vue项目需要用到三级CheckBox复选框,需要实现全选反选不确定三种状态.但是element-ui table只支持多选行,并不能支持三级及以上的多选,下面通过本文给大家讲解实现方法. 效果图预览: 首先是页面布局,当然也可已使用table,但是自己用flex布局后面更容易增删改查其他功能 <div class="deliverySetting-table"> <div class="table-head"> <div clas

  • vue+element UI实现树形表格带复选框的示例代码

    一:在component文件夹下新建如下treeTable文件夹,里面有2个文件: eval.js:将数据转换成树形数据 /** * @Author: jianglei * @Date: 2017-10-12 12:06:49 */ "use strict"; import Vue from "vue"; export default function treeToArray( data, expandAll, parent = null, level = null

  • vue实现带复选框的树形菜单

    本文实例为大家分享了vue实现带复选框的树形菜单展示的具体代码,供大家参考,具体内容如下 代码: <template> <div id="checkTree"> <div class="tree-box"> <div class="zTreeDemoBackground left"> <ul id="treeDemo" class="ztree">

  • vue.js实现单选框、复选框和下拉框示例

    Vue.js可以很方便的实现数据双向绑定,所以在处理表单,人机交互方面具有很大的优势.下边以单选框.复选框和下拉框为例介绍他们在HTML和Vue.js中的具体实现方式. 一.单选框 在传统的HTML中实现单选框的方法如下: <div id="app"> <input type="radio" name="gender" value="man" id="man"/><label

  • vue.js实现含搜索的多种复选框(附源码)

    前言 最近在重构一个复选框组件,原型是select2这个jQuery插件, 有兴趣的可以去搜下,封装的很好,但是并不能满足业务所有需求,最要命的是jquery插件这种以dom驱动数据的库,并不能和vue和angular这种数据驱动dom的框架很好的结合,所以我用vue的component重构了一下,走了不少弯路,做的demo分享出来,还请大家指点一二! download地址:vue_select2(jb51.net).rar 效果图如下,封装的应该是蛮抽象的了,只需要传入下拉框选项list,默认

  • vue+vant-UI框架实现购物车的复选框全选和反选功能

    购物车页面的设计图 商品的列表 代码: <ul v-if="shoppingListData.rows.length"> <li v-for="(item,index) in shoppingListData.rows" :key="index" > <van-checkbox :value="item.goods_id" v-model="item.isChecked" ch

  • vuejs+element UI table表格中实现禁用部分复选框的方法

    有时候我们构建这样带一列复选框的表格 然后希望根据条件禁用某个列表项的选择框,可以这样写 HTML: JS: 以上这篇vuejs+element UI table表格中实现禁用部分复选框的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 基于vue v-for 循环复选框-默认勾选第一个的实现方法

    应用场景:在进行多选的时候一般默认显示第一个. 实现方法:纯vue实现 例子: <span v-for="(one,index) in site"><input type="checkbox" :checked="index == 0" style="vertical-align: middle;"><label>{{one.name}}</label></span>

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

    本文实例为大家分享了vue3.0实现复选框组件封装的具体代码,供大家参考,具体内容如下 大致步骤: 实现组件本身的选中与不选中效果 实现组件的v-model指令 改造成 @vueuse/core 的函数写法 <!-- 组件基本样式 --> <template> <div class="xtx-checkbox" @click="changeChecked()"> <i v-if="checked" cla

  • JS实现复选框的全选和批量删除功能

    如图示: 功能描述:在勾选了全选时,所有的商品都会勾选,在取消全选时,取消所有物品的勾选.如果点击批量删除,删除所勾选的商品. <td align="center" width="12%" > <input type="checkbox" id="allChecks" onclick="ckAll()" /> 全选/全不选 </td> //全选 function ckAl

  • java通过复选框控件数组实现添加多个复选框控件示例分享

    思路如下: 创建JPanel面板对象:使用JPanel类的setLayout(0,4)方法设置网格布局管理器,即列数为4,行数自动调节:创建一个字符串型一维数组作为控件文本数组:创建一个JCheckBox型一维数组作为控件数组:使用for循环遍历控件数组,初始化数组中的复选框组件,使用JPanel类的add()方法把数组元素(即每个复选框)添加到面板中.代码如下: 复制代码 代码如下: package cn.edu.xidian.crytoll; import java.awt.BorderLa

  • 关于Python Tkinter 复选框 ->Checkbutton

     正文如下: import tkinter as tk windows = tk.Tk() windows.title('复选框') lab = tk.Label(windows, text='请选择你喜欢做的事', fg='blue', bg='lightblue', width=35) lab.grid(row=0, pady=2) var_b = tk.IntVar() print(var_b.get()) check_button_b = tk.Checkbutton(windows,

  • Swing常用组件之单选按钮和复选框

    本文为大家分享了Swing单选按钮和复选框的使用方法,供大家参考,具体内容如下 JRadioButton构造函数: JRadioButton():建立一个新的JRadioButton. JRadioButton(Icon icon):建立一个有图像但没有文字的JRadioButton. JRadioButton(Icon icon,boolean selected):建立一个有图像但没有文字的JRadioButton,且设置其初始状态(有无被选取). JRadioButton(String te

  • Java Swing组件复选框JCheckBox用法示例

    本文实例讲述了Java Swing组件复选框JCheckBox用法.分享给大家供大家参考,具体如下: JCheckBox是Swing中的复选框.所谓复选框就是指,可以同时存在多个这样的控件,它们可以有多个处于被选中状态.对于每一个复选框而言,它只有选中和未选中两种状态. JCheckBox的常用方法如下图所示: 可以为它添加ActionListener对象来响应事件. 使用demo如下: JCheckBoxDemo.java package awtDemo; import java.awt.Bo

  • react实现复选框全选和反选组件效果

    本文实例为大家分享了react实现复选框全选和反选组件的具体代码,供大家参考,具体内容如下 运行效果图如下: 代码: import React, { Component } from 'react'; import { withRouter } from 'react-router-dom'; // import Menu from '../menu/Menu.jsx'; class List extends Component { constructor () { super(); this.

  • vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单

    我的 github 地址 - vue3.0Study- 阶段学习成果都会建立分支. 新组件 - 新路由 Forms.vue ( 下面仅介绍如何创立, 不进行介绍 ) : <template><div class="form"> <input v-model="message" placeholder="edit me"> <p>Message is: {{ message }}</p>

  • Java带复选框的树(Java CheckBox Tree)实现和应用

    在使用Java Swing开发UI程序时,很有可能会遇到使用带复选框的树的需求,但是Java Swing并没有提供这个组件,因此如果你有这个需求,你就得自己动手实现带复选框的树. CheckBoxTree与JTree在两个层面上存在差异: 1.在模型层上,CheckBoxTree的每个结点需要一个成员来保存其是否被选中,但是JTree的结点则不需要. 2.在视图层上,CheckBoxTree的每个结点比JTree的结点多显示一个复选框. 既然存在两个差异,那么只要我们把这两个差异部分通过自己的实

随机推荐