我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue下拉菜单组件化开发详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue下拉菜单组件化开发详解

本文实例为大家分享了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

Vue下拉菜单组件化开发详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android开发之无痕过渡下拉刷新控件的实现思路详解

相信大家已经对下拉刷新熟悉得不能再熟悉了,市面上的下拉刷新琳琅满目,然而有很多在我看来略有缺陷,接下来我将说明一下存在的缺陷问题,然后提供一种思路来解决这一缺陷,废话不多说!往下看嘞! 1.市面一些下拉刷新控件普遍缺陷演示 以直播吧APP为
2022-06-06

编程热搜

目录