伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

在 Vue.js 中制作自定义选择组件

来源:本站原创 浏览:48次 时间:2023-07-12
在 Vue.js 中制作自定义选择组件

疯狂的技术宅 前端先锋

翻译:疯狂的技术宅
作者:Lane Wagner
来源:hackernoon
正文共:2337 字
预计阅读时间:7 分钟

定制 select 标签的设计非常困难。有时候,如果不使用样式化的 div 和自定义 JavaScript 的结合来构建自己的脚本,那是不可能的。在本文中,你将学习如何构建使用完全自定义 CSS 设置样式的 Vue.js 组件。


Demo: https://codesandbox.io/s/custom-vuejs-select-component-8nqgd

HTML
 1<template> 2  <div 3    class="custom-select" 4    :tabindex="tabindex" 5    @blur="open = false" 6  > 7    <div 8      class="selected" 9      :class="{open: open}"10      @click="open = !open"11    >12      {{ selected }}13    </div>14    <div15      class="items"16      :class="{selectHide: !open}"17    >18      <div19        class="item"20        v-for="(option, i) of options"21        :key="i"22        @click="selected=option; open=false; $emit('input', option)"23      >24        {{ option }}25      </div>26    </div>27  </div>28</template>

需要注意以下几点:

  • tabindex 属性使我们的组件能够得到焦点,从而使它变得模糊。当用户在组件外部单击时,blur 事件将关闭我们的组件。
  • input 参数发出选定的选项,父组件可以轻松地对更改做出反应。JavaScript
 1<script> 2export default { 3  props:{ 4    options:{ 5      type: Array, 6      required: true 7    }, 8    tabindex:{ 9      type: Number,10      required: false,11      default: 012    }13  },14  data() {15    return {16      selected: this.options.length > 0 ? this.options[0] : null,17      open: false18    };19  },20  mounted(){21    this.$emit('input', this.selected);22  }23};24</script>

另外,要注意的重要事项:

我们还会在 mount 上发出选定的值,以便父级不需要显式设置默认值。如果我们的 select 组件是较大表单的一部分,那么我们希望能够设置正确的 tabindex 。

CSS
 1<style scoped> 2 3.custom-select { 4  position: relative; 5  width: 100%; 6  text-align: left; 7  outline: none; 8  height: 47px; 9  line-height: 47px;10}1112.selected {13  background-color: #080D0E;14  border-radius: 6px;15  border: 1px solid #858586;16  color: #ffffff;17  padding-left: 8px;18  cursor: pointer;19  user-select: none;20}2122.selected.open{23  border: 1px solid #CE9B2C;24  border-radius: 6px 6px 0px 0px;25}2627.selected:after {28  position: absolute;29  content: "";30  top: 22px;31  right: 10px;32  width: 0;33  height: 0;34  border: 4px solid transparent;35  border-color: #fff transparent transparent transparent;36}3738.items {39  color: #ffffff;40  border-radius: 0px 0px 6px 6px;41  overflow: hidden;42  border-right: 1px solid #CE9B2C;43  border-left: 1px solid #CE9B2C;44  border-bottom: 1px solid #CE9B2C;45  position: absolute;46  background-color: #080D0E;47  left: 0;48  right: 0;49}5051.item{52  color: #ffffff;53  padding-left: 8px;54  cursor: pointer;55  user-select: none;56}5758.item:hover{59  background-color: #B68A28;60}6162.selectHide {63  display: none;64}65</style>

该 CSS只是一个示例,你可以按照你的需求随意修改样式。

我希望这可以帮助你创建自己的自定义选择组件,以下是完整组件要点的链接:

最后,在线演示的示例:https://codesandbox.io/s/custom-vuejs-select-component-8nqgd

原文链接

https://hackernoon.com/how-to-make-a-custom-select-component-in-vuejs-8kt32pj

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net