


Bagaimana untuk merangkum komponen menu tanpa had Vue3 Element-plus dan el-menu
Komponen el-menu yang diberikan kepada kami dalam elemen boleh mencapai sehingga tiga peringkat sarang Jika terdapat satu lapisan data lagi, anda hanya boleh menambah satu lapisan sendiri melalui pembolehubah. ia selalunya OK. Ia tidak berfungsi, jadi kami hanya boleh merangkumnya

1. Tentukan data
MenuData.ts
export default [ { id: "1", name: "第一级菜单", level: '1', child: [ { id: "11", name: "第二级菜单", level: '1-1', child: [ { id: "111", name: "第三级菜单", level: '1-1-1', child: [ { id: "1111", name: "第四级菜单", level: '1-1-1-1', child: [ { id: "11111", name: "第五级菜单", level: '1-1-1-1-1', child: [] } ] } ] }] } ] }, { id: "2", name: "第一级同级菜单", level: '2', child: [] } ]
2. Komponen mengekap
Idea pembungkusan:
1. Kitar semula komponen anda sendiri, jika ada subset, gunakan anda komponen sendiri untuk menghantar data anak kepada diri sendiri
2. Jika tiada subset, gunakan el-menu-item
Kod berikut melaksanakan fungsi setup() dan setup syntax sugar masing-masing
persediaan gula sintaks
<template> <el-menu :default-active="defaultActive" :unique-opened="true" class="el-menu-vertical-demo" > <template v-for="item in menu"> <!-- 如果有子集 --> <template v-if="item.child && item.child.length > 0"> <el-sub-menu :key="item.id" :index="item.level" :disabled="item.meta?.disabled" :popper-append-to-body="false" > <template #title> <i :class="[item.meta?.icon]"></i> <!-- 添加空格 表示下级--> <span> {{ generateSpaces(item.level) }} </span> <span slot="title"> {{ item.name }}</span> </template> <MenuTree :menu="item.child" :defaultActive="defaultActive" @clickItem="clickItemHandle" /> </el-sub-menu> </template> <!-- 如果没有子集 --> <template v-else> <el-menu-item :key="item.id" :index="item.level" :disabled="item.meta?.disabled" :popper-append-to-body="false" @click="clickItemHandle(item)" > <i :class="[item.meta?.icon]"></i> <!-- 添加空格 表示下级--> <span> {{ generateSpaces(item.level) }} </span> <span slot="title">{{ item.name }}</span> </el-menu-item> </template> </template> </el-menu> </template> <script lang="ts" name="MenuTree" setup> // 把下面代码变成setup语法糖的形式 import type { PropType } from "vue"; import type { MenuItem } from "@/types/lesson"; // type 为了方便写成这样 可以根据自己项目设定type defineProps({ menu: { type: Array as unknown as PropType<any[]>, required: true, default: () => [], }, defaultActive: { type: String as unknown as PropType<string>, required: true, default: [], }, }); const emit = defineEmits(["update-active-path", "clickItem"]); // 返回的空格字符串 用于显示菜单层级 const generateSpaces = (level: string) => { let str = ""; level.split("") .filter((it) => it != "-") .forEach(() => { str += " "; }); return str; }; // 点击当前菜单项 const clickItemHandle = (item: MenuItem) => { emit("clickItem", item); }; </script> <style scoped lang="less"> .el-menu { width: 288px; } </style>
Fungsi persediaan
<template> <el-menu :default-active="defaultActive" :unique-opened="true" class="el-menu-vertical-demo" > <template v-for="item in menu"> <template v-if="item.child && item.child.length > 0"> <el-sub-menu :key="item.id" :index="item.level" :disabled="item.meta?.disabled" :popper-append-to-body="false" > <template #title> <i :class="[item.meta?.icon]"></i> <!-- 添加空格 表示下级--> <span> {{ generateSpaces(item.level) }} </span> <span slot="title"> {{ item.name }}</span> </template> <MenuTree :menu="item.child" :defaultActive="defaultActive" @clickItem="clickItemHandle" /> </el-sub-menu> </template> <template v-else> <el-menu-item :key="item.id" :index="item.level" :disabled="item.meta?.disabled" :popper-append-to-body="false" @click="clickItemHandle(item)" > <i :class="[item.meta?.icon]"></i> <!-- 添加空格 表示下级--> <span> {{ generateSpaces(item.level) }} </span> <span slot="title">{{ item.name }}</span> </el-menu-item> </template> </template> </el-menu> </template> <script lang="ts"> import { defineComponent, toRefs } from 'vue'; import type { PropType } from 'vue' import type {MenuItem} from '@/types/lesson' export default defineComponent({ name: 'MenuTree', props: { menu: { type: Array as unknown as PropType<any[]>, required: true, default: () => [], }, defaultActive: { type: String as unknown as PropType<string>, required: true, default: '', }, }, emits: ['update-active-path','clickItem'], setup(props, context) { const { menu, defaultActive } = toRefs(props); const generateSpaces = (level:string) => { let str = '' level.split('').filter(it=>it!='-').forEach(() => { str += ' ' }) return str } const clickItemHandle = (item:MenuItem) => { context.emit('clickItem', item) } return { clickItemHandle, menu, defaultActive, generateSpaces, } }, }); </script> <style scoped lang="less"> .el-menu { width: 288px; } </style>
jenis tidak ditambah. 🎜> 3. Gunakan komponen
<template> <MenuTree :menu="menuList" :defaultActive="defaultActive" @clickItem="handleMenuClick" :update-click="handleMenuClick" /> </template> <script setup lang="ts"> import MenuTree from "./components/MenuTree.vue"; import type {MenuItem} from '@/types/lesson' import menuData from './MenuData' const defaultActive = ref<string>(''); // "1-1-1-1" 默认选中的数据 const menuList = ref(menuData) const handleMenuClick = (item:MenuItem) => { console.log('父组件',item); }; </script>
, jika anda ingin mengklik pada lapisan pertama data secara lalai pada mulanya, anda perlu mencari corak untuk mendapatkan semua peringkat, dan mengembalikannya kepada anda melalui antara muka untuk mendapatkan semua peringkat atau
Sebagai contoh, format data:
let arr = [ "1-1", "1-1-1", "1-1-1-1", "1-1-1-2", "1-1-1-3", "1-1-1-4", "1-1-1-5", "1-1-1-6", "1-1-2", "1-1-2-1" ]
Yang dikehendaki. hasilnya ialah elemen terpanjang dengan nombor paling sama 1-1-1-1
arr.sort((a,b)=> b.split('-').length - a.split('-').length)[0]
Gunakan belah untuk menghalang beberapa Rentetan ialah nombor dua digit 10 dan 11
Atas ialah kandungan terperinci Bagaimana untuk merangkum komponen menu tanpa had Vue3 Element-plus dan el-menu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Cara melaksanakan keboleheditan jadual dan pemilihan baris melalui vue dan Element-plus Pengenalan: Jadual ialah salah satu komponen yang kerap digunakan semasa membangunkan aplikasi web. Kebolehsuntingan jadual dan fungsi pemilihan baris adalah keperluan biasa dan praktikal. Dalam rangka kerja Vue.js, kedua-dua fungsi ini boleh dicapai dengan mudah dengan menggabungkan perpustakaan komponen Element-plus. Artikel ini akan memperkenalkan cara melaksanakan fungsi keboleheditan jadual dan pemilihan baris melalui Vue dan Element-plus, serta menyediakan contoh kod yang sepadan. 1. Ketepatan projek

Cara menggunakan Vue dan ElementPlus untuk melaksanakan borang langkah demi langkah dan pengesahan borang Dalam pembangunan web, borang ialah salah satu komponen interaksi pengguna yang paling biasa. Untuk borang yang kompleks, kita selalunya perlu melaksanakan pengisian langkah demi langkah dan fungsi pengesahan borang. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Vue dan ElementPlus untuk mencapai kedua-dua fungsi ini. 1. Borang langkah demi langkah Borang langkah demi langkah merujuk kepada membahagikan borang besar kepada beberapa langkah kecil, dan pengguna perlu mengisi langkah mengikut langkah. Kami boleh memanfaatkan komponenisasi dan penghalaan Vue

Cara menggunakan Vue dan ElementPlus untuk melaksanakan fungsi muat naik dan muat turun fail Pengenalan: Dalam aplikasi web, fungsi muat naik dan muat turun fail adalah perkara biasa. Artikel ini akan memperkenalkan cara menggunakan Vue dan ElementPlus untuk melaksanakan fungsi muat naik dan muat turun fail. Melalui kod sampel, anda boleh dengan mudah dan intuitif memahami cara menggunakan Vue dan ElementPlus untuk melaksanakan fungsi ini. 1. Pasang dan import ElementPlus Pasang ElementPlus dalam projek Vue.

Untuk mencapai muat semula separa halaman, kami hanya perlu melaksanakan pemaparan semula komponen setempat (dom). Dalam Vue, cara paling mudah untuk mencapai kesan ini ialah menggunakan arahan v-if. Dalam Vue2, selain menggunakan arahan v-if untuk memaparkan semula dom setempat, kami juga boleh mencipta komponen kosong baharu Apabila kami perlu memuat semula halaman setempat, lompat ke halaman komponen kosong ini dan kemudian masuk semula pengawal beforeRouteEnter dalam komponen kosong. Seperti yang ditunjukkan dalam rajah di bawah, cara mengklik butang muat semula dalam Vue3.X untuk memuatkan semula DOM dalam kotak merah dan memaparkan status pemuatan yang sepadan. Memandangkan pengawal dalam komponen dalam sintaks persediaan skrip dalam Vue3.X hanya mempunyai o

Penggunaan vue3+vite:src memerlukan pengimportan imej secara dinamik dan laporan ralat dan penyelesaian vue3+vite secara dinamik Jika vue3 dibangunkan menggunakan skrip taip, akan terdapat mesej ralat untuk keperluan untuk memperkenalkan imej tidak boleh digunakan :require(' .../assets/test.png') diimport kerana typescript tidak menyokong require, jadi import digunakan Berikut ialah cara menyelesaikannya: gunakan awaitimport

Pengenalan kepada cara menggunakan Vue dan ElementPlus untuk melaksanakan pemberitahuan mesej dan gesaan pop timbul: Dalam pembangunan aplikasi web, pemberitahuan mesej dan gesaan pop timbul adalah salah satu fungsi yang sangat penting. Sebagai rangka kerja bahagian hadapan yang popular, Vue, digabungkan dengan ElementPlus, perpustakaan UI yang sangat baik, boleh melaksanakan pelbagai gesaan pop timbul dan fungsi pemberitahuan mesej dengan mudah. Artikel ini akan memperkenalkan cara menggunakan perpustakaan komponen ElementPlus dalam projek Vue untuk melaksanakan pemberitahuan mesej dan fungsi gesaan pop timbul, dan melampirkan contoh kod yang berkaitan.

Cara menggunakan Vue dan ElementPlus untuk melaksanakan fungsi eksport dan cetakan data Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat pembangunan bahagian hadapan, semakin banyak aplikasi web perlu menyediakan fungsi eksport dan cetakan data untuk memenuhi keperluan pengguna yang pelbagai untuk penggunaan data. . Sebagai rangka kerja JavaScript yang popular, Vue boleh melaksanakan fungsi eksport dan pencetakan data dengan mudah apabila digunakan dengan pustaka komponen ElementPlus. Artikel ini akan memperkenalkan eksport data dan

Kesan terakhir ialah memasang komponen VueCropper yarnaddvue-cropper@next Nilai pemasangan di atas adalah untuk Vue3 Jika ia adalah Vue2 atau anda ingin menggunakan kaedah lain untuk merujuk, sila lawati alamat npm rasminya. Ia juga sangat mudah untuk merujuk dan menggunakannya dalam komponen Anda hanya perlu memperkenalkan komponen yang sepadan dan fail gayanya. Saya tidak merujuknya secara global di sini, tetapi hanya memperkenalkan import{userInfoByRequest}from'../js/api. ' dalam fail komponen saya import{VueCropper}dari'vue-cropper&
