当前位置: 首页 > Web前端 > vue.js

【Vue笔记】简单写一个`dropdown`组件

时间:2023-03-31 23:57:23 vue.js

项目介绍无关。顺便用自己的技术实现Teambition的下拉。对了,我也会准备笔记,设计需求结构,形成一个三点图标作为激活下拉菜单栏的入口。小菜单项组件的组成是我自己的想法。为了能够复用布局,菜单需要被入口引用,定位在下方某个位置。当下拉框未激活时,菜单无法显示,菜单出现时不会影响其他组件。布局通过点击menu-item触发事件向上传递事件,向上传递menu-item组件menu-item。菜单项需要svg图标、文本文本和触发事件名称操作。由于svg文字太长,设置为slot插入,其余设置为props的基本结构[Dropdown]代码说明请将@click绑定移到menu-item下面的步骤,里面就有你要找的$emit[Dropdown]样式整体布局div.dropdown{display:flex;弹性方向:列;对齐项目:居中;}.menu{位置:绝对;top:31.5px;}设置入口的图标.entrysvg.icon{width:1em;高度:1em;不透明度:0.5;}.entrysvg.icon:hover{不透明度:1;cursor:pointer;}将条目定位为菜单ref.entrysvg.icon{position:relative;}[Dropdown]behaviorimportmenuItemfrom'@/components/menu-item'exportdefault{components:{'menu-item':menuItem,},props:{active:{type:Boolean,default:false,},},methods:{toggleHandler(){this.$emit('toggled')},handler(action){this.$emit('toggle-menu',action)}},}代码说明active代表下拉是否激活v-show="active"控制菜单的显示[menu-item]基本结构<模板>{{text}}

[menu-item]样式整体layout.menu-item{display:flex;光标:指针;}span.icon{宽度:20px;高度:20px;右边距:8px;显示:弹性;对齐项目:居中;justify-content:center;}设置图标大小span.iconsvg{width:100%;height:100%;}代码说明建议设置.menu-item的长度,这里懒得去get[menu-item]behaviorexportdefault{props:{text:{type:String,default:'',},action:{type:String,default:'hello',},},方法:{handler(){this.$emit('click',this.action)},},}代码描述处理程序会将自定义触发事件的名称作为参数传递,对父组件来说,事件仍然是点击,但需要处理一个额外的参数来完成图标。上面下拉框的基本结构中,因为文字太多,我省略了部分图标的代码。接下来我会一一补全<0pathd="M8.88241.9712h-230.2976V202.752c0-55.296-45.056-100.352-100.352-100.352H463.7696c-55.34720-100.35245.056-100.352100.352v39.2192H133.12a30.7230.72000061.4912h66.3552L296.2432855.04c2.5614.694415.308825.395230.259225.3952h370.9952a30.7230.7200030.2592-25.3952l96.768-551.5776H890.88a30.7230.720000-61.4912M261.8368303.4624h103.68l37.2224515.584h-50.432L261.8368303.4624m202.496515.584l-37.1712-515.584h169.6768l-37.1712515.584H464.3328m207.360h-50.432l37.1712-515.584h103.7312l-90.4704515.584M463.7696163.8912h96.4608c21.4528038.91217.40838.91238.8608v39.2192H424.8576V202.752a38.91238.91200138.912-38.8608">在父组件Home.vue中演示