Vue下拉菜單組件化開發(fā)詳解
本文實例為大家分享了Vue下拉菜單組件化開發(fā)的具體代碼,供大家參考,具體內(nèi)容如下
搞一個自定義組件,只是一個很簡單的下拉菜單,也就是一個思路,整起
第一步:在項目中專門創(chuàng)建一個放置自定義組件的文件夾(直接components底下的common中)

dropdown.vue 為一級盒子
dropdownMenu.vue 為二級盒子
dropdownItem.vue 為二級盒子內(nèi)容
第二步 :
對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 {
// 默認二級盒子關(guān)閉
show: false
}
},
methods: {
showM() {
this.show = !this.show
},
commitClick(value) {
// 向父級暴露dropdown事件,并把值傳入
this.$emit('change-item',value)
}
}
}
</script>
<style scoped>
.box {
display: inline-block; /* 行內(nèi)塊 */
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; /* 盒子內(nèi)邊距上下為8px 左右為0 */
border-radius: 4px; /* 盒子圓角 */
border: 1px solid #f2f6fc; /* 邊框為1px 灰色 */
position: absolute; /* 絕對定位 */
right: 0; /* 在右側(cè) */
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調(diào)用當前組件的父級的父級也就是dropdown的showM()方法來進行關(guān)閉
this.$parent.$parent.showM();
// 調(diào)用父級的父級(dropdown)的commitClick方法并傳如value值
this.$parent.$parent.commitClick(value);
},
},
};
</script>
<style scoped>
.dropdown-item {
line-height: 40px; /* 行高40px */
white-space: nowrap; /* 不換行 */
padding: 0 20px; /* 內(nèi)邊距上下為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也要相應(yīng)修改
<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>
大概就是這么一個思路。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue如何處理base64格式文件pdf及圖片預(yù)覽功能
這篇文章主要給大家介紹了關(guān)于vue如何處理base64格式文件pdf及圖片預(yù)覽功能的相關(guān)資料,圖片的base64編碼就是可以將一副圖片數(shù)據(jù)編碼成一串字符串,使用該字符串代替圖像地址,需要的朋友可以參考下2024-05-05
詳解Vue iview IE瀏覽器不兼容報錯(Iview Bable polyfill)
這篇文章主要介紹了Vue iview IE瀏覽器不兼容報錯的決絕方法,由于Iview編譯使用到了es6的一些新特性,但是在IE中不支持ES6的新特性,本文就介紹一下如何解決這些問題2019-01-01
Vue進行數(shù)據(jù)可視化圖表展示的實現(xiàn)示例
數(shù)據(jù)可視化是現(xiàn)代化的數(shù)據(jù)分析和展示方式,可以使數(shù)據(jù)更加直觀、易于理解和傳達,Vue作為一款流行的前端框架,提供了豐富的插件和工具來實現(xiàn)數(shù)據(jù)可視化圖表展示,本文將介紹如何使用Vue和Echarts/D3.js來實現(xiàn)數(shù)據(jù)可視化圖表展示,并提供示例代碼和實際應(yīng)用場景2023-10-10
完美解決vue中報錯?“TypeError:?Cannot?read?properties?of?null?
這篇文章主要介紹了完美解決vue中報錯?“TypeError:?Cannot?read?properties?of?null?(reading?‘forEach‘)“,本文給大家分享詳細解決方案,需要的朋友可以參考下2023-02-02
vue?element-ui如何在el-tabs組件最右側(cè)添加按鈕
這篇文章主要介紹了vue?element-ui如何在el-tabs組件最右側(cè)添加按鈕問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

