Vue下拉菜单组件化开发详解
短信预约 -IT技能 免费直播动态提醒
本文实例为大家分享了Vue下拉菜单组件化开发的具体代码,供大家参考,具体内容如下
搞一个自定义组件,只是一个很简单的下拉菜单,也就是一个思路,整起
第一步:在项目中专门创建一个放置自定义组件的文件夹(直接components底下的common中)
dropdown.vue 为一级盒子
dropdownMenu.vue 为二级盒子
dropdownItem.vue 为二级盒子内容
第二步 :
对dropdown.vue的操作
<template>
<div class="box">
<!-- 给按钮加点击事件 -->
<div @click="showM">
<!-- 一级按钮 -->
<slot name="title"></slot>
</div>
<!-- 二级盒子 -->
<!-- 加v-if操作 隐藏显示效果 -->
<slot v-if="show" name="dropdown"></slot>
</div>
</template>
<script>
export default {
name: "dropdown",
data() {
return {
// 默认二级盒子关闭
show: false
}
},
methods: {
showM() {
this.show = !this.show
},
commitClick(value) {
// 向父级暴露dropdown事件,并把值传入
this.$emit('change-item',value)
}
}
}
</script>
<style scoped>
.box {
display: inline-block;
position: relative;
top:100px;
margin-left:100px
}
</style>
对于dropdownMenu仅仅只是把它当作一个盒子,只需要添加一个插槽,把盒子搭好即可
<template>
<div class="dropdown-menu">
<slot></slot>
</div>
</template>
<script>
export default {
name: "dropdownMenu"
}
</script>
<style scoped>
.dropdown-menu {
padding: 8px 0;
border-radius: 4px;
border: 1px solid #f2f6fc;
position: absolute;
right: 0;
top: 110%;
background-color: #fff;
box-shadow: 0 2px 4px rgba(0,0,0,0.12),0 0 6px rgba(0,0,0,.04);
}
</style>
对dropdownItem的操作
<template>
<div class="dropdown-item" @click="itemClick(value)">
<slot></slot>
</div>
</template>
<script>
export default {
name: "dropdownItem",
props:['value'],
data() {
return {};
},
methods: {
itemClick(value) {
// console.log(value)
//通过this调用当前组件的父级的父级也就是dropdown的showM()方法来进行关闭
this.$parent.$parent.showM();
// 调用父级的父级(dropdown)的commitClick方法并传如value值
this.$parent.$parent.commitClick(value);
},
},
};
</script>
<style scoped>
.dropdown-item {
line-height: 40px;
white-space: nowrap;
padding: 0 20px;
color: #606266;
cursor: pointer;
}
.dropdown-item:hover {
color: #409eff;
background-color: #ecf5ff;
}
</style>
接下来对App.vue文件进行操作
<template>
<div id="app">
<dropdown @change-item="changeItem">
<button slot="title">按钮</button>
<dropdown-menu slot="dropdown">
<dropdown-item value="吃的">吃的</dropdown-item>
<dropdown-item value="喝的">喝的</dropdown-item>
<dropdown-item value="玩的">玩的</dropdown-item>
</dropdown-menu>
</dropdown>
</div>
</template>
<script>
import dropdown from './components/common/dropdown'
import dropdownMenu from "./components/common/dropdownMenu";
import dropdownItem from "./components/common/dropdownItem";
export default {
name: 'App',
components: {
dropdown,dropdownMenu,dropdownItem
},
methods:{
changeItem(e){
console.log(e)
}
}
}
</script>
在main.js导入组件
import zgDropdown from "@/components/common/dropdown"
import zgDropdownMenu from "@/components/common/dropdownMenu"
import zgDropdownItem from "@/components/common/dropdownItem"
Vue.component('zgDropdownItem',zgDropdownItem)
Vue.component('zgDropdown',zgDropdown)
Vue.component('zgDropdownMenu',zgDropdownMenu)
app.vue也要相应修改
<template>
<div id="app">
<zg-dropdown @change-item="changeItem">
<button slot="title">按钮</button>
<zg-dropdown-menu slot="dropdown">
<zg-dropdown-item value="吃的">吃的</zg-dropdown-item>
<zg-dropdown-item value="喝的">喝的</zg-dropdown-item>
<zg-dropdown-item value="玩的">玩的</zg-dropdown-item>
</zg-dropdown-menu>
</zg-dropdown>
</div>
</template>
<script>
export default {
name: 'App',
methods:{
changeItem(e){
console.log(e)
}
}
}
</script>
<style scoped>
</style>
大概就是这么一个思路。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341