美文网首页react & vue & angularvue
vue3——实现复选框效果组件封装

vue3——实现复选框效果组件封装

作者: 晨曦的杂货铺 | 来源:发表于2022-06-27 22:09 被阅读0次

复选框的效果在网页中很常见,那么你知道复选框是如何实现的吗?

一.封装的意义

  • 复用性更好
  • 代码可维护性
  • 可以扩展其他业务

二.准备

  1. 使用的字体为阿里的iconfont上的字体图标资源,将需要的图标添加到购物车,然后把文件夹下载到本地,
    src/static/iconfont.js(把文件夹中的eiconfont.js,添加到static目录下),用svg 导入图标
 <svg v-if="checked" class="icon icon-checked" aria-hidden="true">
      <use xlink:href="#icon-fuxuankuang1"></use>
    </svg>
  1. 终端中执行yarn add @vueuse/core@5.3.0,这里安装指定版本,各位按需选择。

三.如何封装

  1. 封装
    src/libs/CheckBox.vue(这是复选框的通用组件基本构建)
    代码如下示例:
<template>
  <div class="my-checkbox" @click="changeChecked">
    <svg v-if="checked" class="icon icon-checked" aria-hidden="true">
      <use xlink:href="#icon-fuxuankuang1"></use>
    </svg>

    <svg v-else class="icon icon-unchecked" aria-hidden="true">
      <use xlink:href="#icon-fangkuang"></use>
    </svg>
    <span v-if="$slots.default"><slot /></span>
  </div>
</template>
<script lang="ts">
import { useVModel } from "@vueuse/core";
import { ref } from "vue";
export default {
  props: {
    modelValue: {
      type: Boolean,
      default: false,
    },
  },
  setup(props, { emit }) {
    //获取父组件传递过来的值
    const checked = useVModel(props, "modelValue", emit);
    return { checked };
  },
  //   setup(props, { emit }) {
  //   选中与否的状态位
  //     const checked = ref(props.modelValue);
  //     const changeChecked = () => {
  //       checked.value = !checked.value;
  //        修改modelValue的值
  //       emit("update:modelValue", !props.modelValue);
  //     };
  //     return { checked, changeChecked };
  //   },
};
</script>
<style lang="scss">
$color: #27ba9b;

.my-checkbox {
  display: inline-block;
  &:last-child {
    margin-left: 30px;
  }

  .icon-checked {
    color: $color;
    ~ span {
      color: $color;
    }
  }
  svg {
    font-size: 20px;
    position: relative;
    top: 1px;
  }
  span {
    margin-left: 5px;
    font-size: 20px;
  }
}
</style>
  1. 使用
    任意.vue结尾文件中使用,标签中的内容会放置在标签中的内容会放置在封装的全局插件的默认插槽中,各位可根据需求定制。
    代码如下(示例):
<template>
  <h1>Checkbox组件示例</h1>
  <div class="demo">
    <h2>常规用法</h2>
    <div class="demo__component">
      <CheckBox v-model="isSelect.checked">复选框 勾选</CheckBox>
      <CheckBox v-model="isSelect.noChecked">复选框 取消勾选</CheckBox>
    </div>
    <div class="demo__actions">
      <Button>隐藏代码</Button>
    </div>
    <div v-if="false" class="demo__code">
      <pre>代码</pre>
    </div>
  </div>
</template>
<script>
import CheckBox from "../libs/CheckBox.vue";
import Button from "../libs/Button.vue";
import { reactive } from "vue";
export default {
  components: {
    CheckBox,
    Button,
  },
  setup() {
    const isSelect = reactive({
      checked: true,
      noChecked: false,
    });
    return { isSelect };
  },
};
</script>
<style lang="scss">
</style>

四. 效果演示

复选框效果图.png

总结

Always believe that efforts will be rewarded

相关文章

  • vue3——实现复选框效果组件封装

    复选框的效果在网页中很常见,那么你知道复选框是如何实现的吗? 一.封装的意义 复用性更好 代码可维护性 可以扩展其...

  • vue3 中对 dialog 封装

    vue3 中对 dialog 封装 子组件 父组件

  • 复选框组件封装

    目的:实现一个自定义复选框组件。 大致步骤: 实现组件本身的选中与不选中效果 实现组件的v-model指令 改造成...

  • 面向对象实战

    封装一个轮播组件 代码效果预览 封装一个曝光加载组件 效果代码预览 封装一个 Tab 组件 效果代码

  • Vue之transition

    Vue的transition实现动画效果 Vue 提供了 transition 的封装组件,可以给任何元素和组件添...

  • 面向对象实战

    题目1: 封装一个轮播组件封装轮播组件(效果)代码题目2: 封装一个曝光加载组件封装曝光加载(效果)代码题目3: ...

  • 面向对象实战

    1.封装一个轮播组件 轮播组件效果 2.封装一个曝光加载组件 曝光组件效果 3.封装一个 Tab 组件 Tab栏切...

  • 期待已久的鹅厂面试题来咯,Vue3实现递归菜单组件

    前言这是一篇 Vue3 + TS 实现递归组件的文章。 需求可以先在 Github Pages 中预览一下效果。 ...

  • Flutter 账号设置页(1)

    看实现效果每一条Item可以进行小组件的封装 Visibility组件 是控制子组件隐藏/可见的组件 库功能chi...

  • 面向对象实战

    题目1:封装一个轮播组件 效果demo 题目2:封装一个曝光加载组件 效果demo 题目3:封装一个 Tab 组件...

网友评论

    本文标题:vue3——实现复选框效果组件封装

    本文链接:https://www.haomeiwen.com/subject/xvbovrtx.html