自定义无限级联菜单UI组件

无限级联菜单-vue为n2.x版本

定义TreeMenu文件夹用于存放所有组件

tree-menu组件需要使用插槽

//    css样式

.tree-menu {

    width: 300px;

    background: black;

    color: white;

}

index.vue文件

在main.js中导入TreeMenu

// 注册TreeMenu组件

import TreeMenu from "@/views/TreeMenu"

Vue.component("TreeMenu.name,TreeMenu")

App.vue中使用tree-menu组件

<template>

    <div id="app">

        <div class="side-bar">

            <tree-menu>

                <tree-item>菜单1</tree-item>

                <tree-item>菜单2</tree-item>

                <tree-item>菜单3</tree-item>

            </tree-menu>

        </div>

  </div>

</template>

这时就需要定义menu-item组件

// menu-item组件

<template>

    <div class="menu-item">        

        <slot></slot>

    </div>

</template>

<script>

export default {

    name : "menu-item"

}

</script>

<style scoped>

.menu-item {

height: 50px;

text-align: center;

line-height: 50px;

}

</style>

也需要在main.js中进行组件注册

// 注册MenuItem组件

import MenuItem from "./views/TreeMenu2/MenuItem";

Vue.component(MenuItem.name,MenuItem);

继续定义级联菜单组件   

二级联菜单组件

在main.js中注册

// 注册下拉组件

import SubMenu from "./views/TreeMenu2/subMenu";

Vue.component(SubMenu.name,SubMenu);

app.vue中使用

// 在此之前可以自行定义menu.js数据

<sub-menu v-else :key="item.id">

    <menu-item slot="title">{{ item.title }}</menu-item>

    <menu-item v-for="item2 in item.children" :key="item2.id">

        {{ item2.title }}

    </menu-item>

</sub-menu>

无限级联菜单

<template>

    <div>

        <sub-menu>

            <template #title>{{ data.title }}</template>

            <template v-for="c of data.children">

                <menu-item :key="c.id" v-if="!c.children"> {{ c.title }} </menu-item>

                <re-sub-menu v-else :key="c.id" :data="c" > </re-sub-menu>

           </template>

        </sub-menu>

    </div>

</template>

<script>

export default {

    name: "ReSubMenu",

    props: { data: Object, }, data() { return {}; },

};

</script>

<style scoped></style>

main.js中配置

// 注册递归组件

import ReSubMenu from "./views/TreeMenu/ReSubMenu";

Vue.component(ReSubMenu.name,ReSubMenu)

APP.vue中使用

<re-sub-menu v-else :key="c.id" :data="c" > </re-sub-menu>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容