


Bagaimana untuk melaksanakan komponen tab dan halaman berbilang tab dalam Vue?
Dengan pengemaskinian berterusan teknologi bahagian hadapan, Vue, sebagai rangka kerja bahagian hadapan yang popular, telah menjadi pilihan pertama banyak pembangun. Dalam projek sebenar, selalunya perlu menggunakan komponen tab dan halaman berbilang tab untuk menukar dan mengurus modul berfungsi yang berbeza. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Vue untuk melaksanakan komponen tab mudah dan halaman berbilang tab.
1. Laksanakan komponen tab mudah
- Buat komponen Tab.vue
Buat komponen Tab.vue dalam projek untuk memaparkan senarai tab dan kandungan halaman tab yang dipilih pada masa ini.
<template> <div> <div class="tab-header"> <div class="tab-item" v-for="(tab, index) in tabs" :key="index" :class="{ active: index === currentIndex }" @click="handleTab(index)"> {{ tab.title }} </div> </div> <div class="tab-content"> <slot></slot> </div> </div> </template> <script> export default { name: 'Tab', props: { tabs: { type: Array, required: true, }, currentIndex: { type: Number, default: 0, }, }, methods: { handleTab(index) { this.$emit('tabchange', index); }, }, }; </script>
Dalam komponen ini, kami menjadikan tajuk setiap tab menjadi item tab dengan menggunakan arahan v-for untuk beralih melalui tatasusunan tab masuk. Indeks semasa halaman tab yang dipilih akan menambah kelas aktif pada item tab untuk menyerlahkan halaman tab yang dipilih pada masa ini. Komponen tab mempunyai slot slotnya sendiri, yang digunakan untuk memaparkan kandungan halaman tab.
- Gunakan komponen Tab dalam komponen induk
Pada halaman yang perlu menggunakan komponen tab, import komponen Tab dan gunakannya dalam templat dan lulus halaman tab yang perlu dipaparkan ke dalam komponen Tab sebagai ahli tatasusunan tab , dan tentukan indeks halaman tab yang sedang dipilih melalui atribut currentIndex. Selain itu, dengar peristiwa pertukaran tab dalam komponen Tab untuk menukar nilai currentIndex dalam komponen induk untuk mengawal halaman tab yang dipilih pada masa ini.
<template> <div> <Tab :tabs="tabs" :currentIndex="currentIndex" @tabchange="handleChange"> <div v-for="(tab, index) in tabs" :key="index"> {{ tab.content }} </div> </Tab> </div> </template> <script> import Tab from './Tab.vue'; export default { name: 'App', components: { Tab, }, data() { return { currentIndex: 0, tabs: [ { title: 'tab1', content: '这是第一个 tab 页的内容', }, { title: 'tab2', content: '这是第二个 tab 页的内容', }, ], }; }, methods: { handleChange(index) { this.currentIndex = index; }, }, }; </script>
Dalam komponen induk ini, kita perlu mengimport komponen Tab dahulu, dan kemudian mencipta tatasusunan tab untuk menyimpan tajuk dan kandungan setiap halaman tab. Dua sifat, tab dan currentIndex, perlu dihantar dalam templat untuk memulakan komponen Tab masing-masing. Dalam kaedah handleChange, kami mendengar peristiwa pertukaran tab, supaya nilai currentIndex boleh dikemas kini dalam komponen induk untuk memilih halaman tab yang berbeza.
2. Laksanakan komponen berbilang tab
- Buat susun atur halaman dan konfigurasi penghalaan
Untuk mencipta halaman dengan fungsi berbilang tab dalam projek, anda perlu mempertimbangkan reka letak halaman terlebih dahulu. Dalam artikel ini, kami menggunakan komponen Reka Letak UI Elemen untuk membina infrastruktur halaman, dan kemudian melengkapkan konfigurasi penghalaan melalui Penghala Vue. Dalam senario berbilang tab, setiap halaman tab boleh dianggap sebagai halaman penghalaan, jadi maklumat penghalaan yang sepadan perlu ditambahkan pada jadual penghalaan.
<template> <div class="page-container"> <el-container> <el-header> <h1>{{ pageTitle }}</h1> </el-header> <el-container> <el-aside style="width: 200px; height: 100%"> <el-menu :default-active="activeMenu" @select="handleSelect" unique-opened :collapse="isCollapse"> <el-submenu v-for="menuGroup in menuList" :key="menuGroup.name" :index="menuGroup.name"> <template slot="title"> <i :class="menuGroup.icon"></i> <span>{{ menuGroup.title }}</span> </template> <el-menu-item v-for="menuItem in menuGroup.children" :key="menuItem.path" :index="menuItem.path"> <i :class="menuItem.icon"></i> <span slot="title">{{ menuItem.title }}</span> </el-menu-item> </el-submenu> </el-menu> </el-aside> <el-main> <router-view/> </el-main> </el-container> </el-container> </div> </template> <script> export default { name: 'PageLayout', data() { return { pageTitle: '多标签页示例', menuList: [ { name: 'group1', title: '分组 1', icon: 'el-icon-s-home', children: [ { title: '页面 1', path: '/page1', icon: 'el-icon-s-order', }, { title: '页面 2', path: '/page2', icon: 'el-icon-s-data', }, ], }, { name: 'group2', title: '分组 2', icon: 'el-icon-s-management', children: [ { title: '页面 3', path: '/page3', icon: 'el-icon-s-flag', }, { title: '页面 4', path: '/page4', icon: 'el-icon-menu', }, ], }, ], activeMenu: '', isCollapse: false, }; }, methods: { handleSelect(index) { this.activeMenu = index; this.$router.push(index); }, }, }; </script>
Dalam PageLayout.vue komponen induk, kami mula-mula menetapkan tajuk halaman pageTitle, senarai menu Senarai menu dan dua nilai status ActiveMenu dan isCollapse untuk pengembangan dan penutupan menu. Kemudian komponen Reka Letak UI Elemen digunakan untuk membina struktur asas halaman, dengan bar menu di sebelah kiri dan kandungan tab di sebelah kanan. Dalam komponen menu el-menu, kami memaparkan kumpulan menu dan item menu melalui gelung v-for Item menu terikat pada laluan penghalaan yang sepadan Apabila item menu diklik, kaedah handleSelect dicetuskan dan laluan penghalaan dihantar ke $router Lompat ke halaman yang sepadan dalam kaedah tolak. Dalam komponen ini kita perlu menggunakan router-view untuk memaparkan komponen penghalaan yang sepadan.
- Laksanakan komponen Tab dan fungsi berbilang tab
Selepas melengkapkan susun atur halaman dan konfigurasi penghalaan, kita perlu melaksanakan komponen tab dan fungsi berbilang tab dalam halaman, dan menulis kod js yang sepadan. Dalam fungsi berbilang tab, anda perlu terlebih dahulu melaksanakan komponen bar tab TabBar.vue, yang digunakan untuk memaparkan tajuk setiap tab dan mengawal penambahan dan pemadaman tab.
<template> <div class="tab-bar" :class="{ fixed: isFixed }"> <div class="tab-bar-content"> <div v-for="(tab, index) in tabs" :key="index" class="tab-item" :class="{ active: currentIndex === index }" @click="handleChange(index)"> {{ tab.title }} <i class="el-icon-close" @click.stop="handleRemoveTab(index)"></i> </div> <i class="el-icon-circle-plus add-tab-btn" @click.stop="handleAddTab"></i> </div> </div> </template> <script> export default { name: 'TabBar', props: { tabs: { type: Array, required: true, }, currentIndex: { type: Number, default: 0, }, isFixed: { type: Boolean, default: false, }, }, methods: { handleChange(index) { this.$emit('tabchange', index); }, handleAddTab() { this.$emit('addtab'); }, handleRemoveTab(index) { this.$emit('removetab', index); }, }, }; </script>
Dalam komponen ini, kami menjadikan tajuk setiap tab sebagai item tab dengan menggunakan gelung v-untuk untuk memaparkan tatasusunan tab masuk. Halaman tab yang dipilih akan menambah kelas aktif pada item tab untuk menyerlahkan halaman tab yang sedang dipilih. Komponen bar tab disertakan dengan tiga peristiwa: pertukaran tab digunakan untuk mendengar peristiwa penukaran tab dan tab tambah dan tab keluar digunakan untuk mendengar acara penambahan dan pengalihan tab untuk mengemas kini nilai tatasusunan tab dalam komponen induk.
Dalam PageLayout.vue komponen induk, kita perlu menambah komponen TabBar di bawah struktur halaman, masukkan tab dan sifat CurrentIndex, kemudian kemas kini tatasusunan tab dalam kaedah acara yang sepadan untuk mengendalikan halaman tab yang sepadan.
<template> <div class="page-container"> ... <el-main> <tab-bar :tabs="tabs" :currentIndex="currentIndex" :isFixed="isFixed" @tabchange="handleChange" @addtab="handleAddTab" @removetab="handleRemoveTab"/> <router-view v-if="$route.meta.keepAlive"/> <keep-alive> <router-view v-if="!$route.meta.keepAlive"/> </keep-alive> </el-main> </div> </template> <script> import TabBar from '../components/TabBar.vue'; export default { name: 'PageLayout', components: { TabBar, }, data() { return { tabs: [ { title: '首页', path: '/', }, ], currentIndex: 0, isFixed: false, }; }, created() { this.$router.afterEach((to, from) => { const index = this.tabs.findIndex(tab => tab.path === to.path); if (index !== -1) { this.currentIndex = index; this.isFixed = false; } else { this.addTab(to); } }); }, methods: { handleChange(index) { this.$router.push(this.tabs[index].path); }, handleAddTab() { const isExist = this.tabs.find(tab => tab.path === this.$route.path); if (!isExist) { this.tabs.push({ title: this.$route.meta.title || '', path: this.$route.path, }); this.currentIndex = this.tabs.length - 1; this.isFixed = false; } else { this.currentIndex = this.tabs.indexOf(isExist); this.isFixed = false; } this.$router.push(this.$route.path); }, handleRemoveTab(index) { const targetTab = this.tabs[index]; const targetPath = targetTab.path; this.tabs.splice(index, 1); if (targetPath === this.$route.path) { const lastIndex = this.tabs.length - 1; const lastTab = this.tabs[lastIndex]; this.currentIndex = lastIndex; this.$router.push(lastTab.path); } else { this.currentIndex = this.tabs.findIndex(tab => tab.path === this.$route.path); } }, }, }; </script>
Dalam PageLayout.vue, kami mula-mula mencipta tatasusunan tab untuk menyimpan maklumat penghalaan setiap halaman tab. Dalam fungsi cangkuk yang dicipta, kami mendengar perubahan dalam laluan semasa dan mencari laluan tab yang sepadan dalam tatasusunan tab. Jika ia wujud, navigasi terus ke tab yang sepadan, jika tidak tambahkan laluan semasa sebagai tab baharu. Dalam kaedah handleAddTab, jika tab yang sepadan dengan laluan semasa sudah wujud, pilih terus tab sedia ada, jika tidak tambahkan tab baharu pada tatasusunan tab. Dalam kaedah handleRemoveTab, kami menggunakan kaedah splice tatasusunan untuk memadam tab sedia ada, mencari tab yang dipilih pada masa ini dalam tatasusunan tab dan mengemas kini maklumat lompat currentIndex dan $router.
3
Dalam artikel ini, kami memperkenalkan cara menggunakan rangka kerja Vue dan pemalam yang berkaitan untuk melaksanakan komponen tab dan fungsi berbilang tab. Semasa proses pelaksanaan sebenar, komponen atau kod perlu diselaraskan secara fleksibel mengikut senario tertentu untuk lebih menyesuaikan diri dengan keperluan projek sebenar. Secara umum, komponen tab dan fungsi berbilang tab boleh memberikan kebolehgunaan dan pengalaman pengguna yang lebih baik untuk projek itu, dan menyelesaikan masalah seni bina halaman hadapan dengan lebih baik.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan komponen tab dan halaman berbilang tab dalam Vue?. 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

AI Hentai Generator
Menjana ai hentai secara percuma.

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



Terdapat tiga cara untuk merujuk kepada fail JS dalam vue.js: Secara langsung tentukan jalan menggunakan & lt; skrip & gt; tag ;; import dinamik menggunakan cangkuk kitaran hayat yang dipasang (); dan mengimport melalui Perpustakaan Pengurusan Negeri VUEX.

Pilihan Watch di Vue.js membolehkan pemaju mendengar perubahan dalam data tertentu. Apabila data berubah, tontonkan mencetuskan fungsi panggil balik untuk melakukan paparan kemas kini atau tugas lain. Pilihan konfigurasinya termasuk segera, yang menentukan sama ada untuk melaksanakan panggilan balik dengan serta -merta, dan mendalam, yang menentukan sama ada untuk mendengarkan secara rekursif terhadap objek atau tatasusunan.

Anda boleh menambah fungsi ke butang VUE dengan mengikat butang dalam templat HTML ke kaedah. Tentukan kaedah dan tulis logik fungsi dalam contoh Vue.

Menggunakan bootstrap dalam vue.js dibahagikan kepada lima langkah: Pasang bootstrap. Import bootstrap di main.js. Gunakan komponen bootstrap secara langsung dalam templat. Pilihan: Gaya tersuai. Pilihan: Gunakan pemalam.

Vue.js mempunyai empat kaedah untuk kembali ke halaman sebelumnya: $ router.go (-1) $ router.back () menggunakan & lt; router-link to = & quot;/& quot; Komponen Window.History.Back (), dan pemilihan kaedah bergantung pada tempat kejadian.

Melaksanakan kesan menatal marquee/teks di VUE, menggunakan animasi CSS atau perpustakaan pihak ketiga. Artikel ini memperkenalkan cara menggunakan animasi CSS: Buat teks tatal dan bungkus teks dengan & lt; div & gt;. Tentukan animasi CSS dan tetapkan limpahan: tersembunyi, lebar, dan animasi. Tentukan frasa key, set Transform: TranslateX () pada permulaan dan akhir animasi. Laraskan sifat animasi seperti tempoh, kelajuan tatal, dan arah.

Dalam vue.js, pemuatan malas membolehkan komponen atau sumber dimuatkan secara dinamik seperti yang diperlukan, mengurangkan masa pemuatan halaman awal dan meningkatkan prestasi. Kaedah pelaksanaan khusus termasuk menggunakan & lt; menyimpan-Alive & gt; dan & lt; komponen adalah & gt; komponen. Harus diingat bahawa pemuatan malas boleh menyebabkan masalah fouc (skrin percikan) dan harus digunakan hanya untuk komponen yang memerlukan pemuatan malas untuk mengelakkan overhead prestasi yang tidak perlu.

Anda boleh menanyakan versi VUE dengan menggunakan Vue Devtools untuk melihat tab VUE dalam konsol penyemak imbas. Gunakan NPM untuk menjalankan arahan "NPM LIST -G VUE". Cari item VUE dalam objek "Dependencies" fail Package.json. Untuk projek Vue CLI, jalankan perintah "Vue -version". Semak maklumat versi di & lt; skrip & gt; Tag dalam fail HTML yang merujuk kepada fail VUE.
