vue router让子路由全部分离为独立组件
这次给大家带来vue router让子路由全部分离为独立组件,vue router让子路由全部分离为独立组件的注意事项有哪些,下面就是实战案例,一起来看一下。
vue-router 之动态路由
vue-router官网上面是这样说的 // 带查询参数,变成 /register?plan=private router.push({ path: 'register', query: { plan: 'private' }}) 然后,我就这样写了: this.$router.push({path:'manage', query: {id: 'tasklist'}})1 结果很明显,失败了。然后我就默默的再次看了一下官网,结果发现了这句话 // 命名的路由 router.push({ name: 'user', params: { userId: 123 }}) // 带查询参数,变成 /register?plan=private router.push({ path: 'register', params: { plan: 'private' }}) 注意:如果提供了 path,params 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path: const userId = 123 router.push({ name: 'user', params: { userId }}) // -> /user/123 router.push({ path: `/user/${userId}` }) // -> /user/123 // 这里的 params 不生效 router.push({ path: '/user', params: { userId }}) // -> /user 谨记啊,动态实现二级路由,需要先用变量保存二级路由名称(let router = 'tasklist'),然后调用this.$router.push({path: `/user/${router}`}).
下面看下vue router动态路由下让每个子路由都是独立组件的解决方案
因为 vue-router 对嵌套路由采用的是组件复用策略,这在大部分场景的确是高效的做法,但是如果遇到这种情况:
就是要求多个子路由共活,并且有频繁来回切换需求的话,就很希望能让每个子路由都是独立组件了,虽然可以通过监听路由切换
watch: { '$route'(to) { if (to.meta.path === '/page/buy-details') { this.id = to.params.id; this.state() } } },
去实时处理更新的数据,我之前一直都是这么做的,包括上面那副动图的页面,但是这真的很麻烦,要让用户切换中准确的回到切换前页面的显示状态,要考虑的东西太多,于是想出了一个解决方案:
子路由组件不涉及实际业务代码,只维护一个打开过的id列表,路由切换到这边时,判断id,没打开过的添加,通过这个列表循环出实际的子路由组件,v-show当前id的,这样就能实现每个实例都是独立的了
我按这个思路写出一个 mixins
details-page.js
export default { watch: { '$route'(to, from) { this.detailsLeave(from); this.detailsOpen(to); } }, data() { return { pagePath: '', pageId: 0, pages: {} } }, methods: { /** * 子页面打开触发 * @param route */ detailsOpen(route) { if (this.detailsPathGet(route.path) === this.pagePath) { if (!this.pages[route.params.id]) { this.$set(this.pages, route.params.id, { id: route.params.id, scrollTop: 0 }) } //路由打开 跳转滚动条 this.pageId = route.params.id; this.$nextTick(()=>{ this.$parent.$el.firstChild.scrollTop = this.pages[route.params.id].scrollTop; }); } }, /** * 路由切换触发 * 判断离开的路由是否是当前页面,如果是则记录滚动条高度 * @param route */ detailsLeave(route) { if (this.detailsPathGet(route.path) === this.pagePath) { if (this.pages[route.params.id]) { //记录滚动条高度 此处针对ea-admin后台 不同的框架要记录的滚动条el不同 this.pages[route.params.id].scrollTop = this.$parent.$el.firstChild.scrollTop ; } } }, /** * 子页面关闭函数 * @param id */ detailsClose(id) { delete this.pages[id] }, /** * 取路由不含最后一项参数的地址 * @param path * @returns {string} */ detailsPathGet(path) { const i = path.lastIndexOf('/'); return path.substr(0, i); } }, mounted() { //通过当前路由地址创建页面识别地址 注:只对path: '/user/:id' 有效 当 path: /user/:id/profile 失效 this.pagePath = this.detailsPathGet(this.$route.path); //执行第一次子页面打开 this.detailsOpen(this.$route); //监听标签关闭消息 此处针对ea-admin后台 不同框架监听关闭方式不同 this.$tabs.onRemove((page, next) => { //收到标签关闭回调,判断关闭的是否是当前页面 if (page._path === this.pagePath) { //触发子页面删除 this.detailsClose(page.id) } next() }) } }
Details.vue
<template> <p> <your-component v-for="item in pages" :id="item.id" :key="item.id" v-show="item.id === pageId"> </your-component> </p> </template> <script> import YourComponent from ''; import detailsPage from '../mixins/details-page' export default { name: 'DetailsPage', components: {YourComponent}, mixins: [detailsPage], } </script>
这样子组件可以只专注处理自己的固定数据,因为组件唯一,不用再去烦恼为每个id存储视图状态了。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
Atas ialah kandungan terperinci vue router让子路由全部分离为独立组件. 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



Panduan Pengguna ReactRouter: Cara Melaksanakan Kawalan Penghalaan Hadapan Dengan populariti aplikasi satu halaman, penghalaan bahagian hadapan telah menjadi bahagian penting yang tidak boleh diabaikan. Sebagai perpustakaan penghalaan paling popular dalam ekosistem React, ReactRouter menyediakan fungsi yang kaya dan API yang mudah digunakan, menjadikan pelaksanaan penghalaan bahagian hadapan sangat mudah dan fleksibel. Artikel ini akan memperkenalkan cara menggunakan ReactRouter dan menyediakan beberapa contoh kod khusus. Untuk memasang ReactRouter dahulu, kita perlukan

Cara menggunakan sistem modul dalam Java 9 untuk memisahkan dan mengasingkan kod Memandangkan skala perisian terus berkembang, kerumitan kod terus meningkat. Untuk mengatur dan mengurus kod dengan lebih baik, Java9 memperkenalkan sistem modul. Kemunculan sistem modul menyelesaikan masalah kebergantungan pakej tradisional, menjadikan pengasingan dan pengasingan kod lebih mudah dan lebih fleksibel. Artikel ini akan memperkenalkan cara menggunakan sistem modul dalam Java 9 untuk mencapai pengasingan dan pengasingan kod. 1. Definisi modul Dalam Java9, kita boleh menggunakan kata kunci modul untuk mentakrifkan

Tajuk: Cadangan tentang pemilihan teknologi bahagian hadapan dalam pembangunan pemisahan bahagian hadapan dan belakang Golang Memandangkan kerumitan dan keperluan aplikasi web terus meningkat, model pembangunan pemisahan bahagian hadapan dan belakang menjadi semakin popular. Dalam model pembangunan ini, bahagian belakang bertanggungjawab untuk memproses logik perniagaan, dan bahagian hadapan bertanggungjawab untuk memaparkan halaman dan berinteraksi dengan pengguna yang berkomunikasi melalui API. Untuk pasukan pembangunan yang menggunakan Golang sebagai bahasa bahagian belakang, memilih teknologi bahagian hadapan yang betul adalah penting. Artikel ini akan membincangkan teknologi bahagian hadapan yang disyorkan untuk dipilih dalam pembangunan bahagian hadapan dan bahagian belakang yang berasingan di Golang, dan

VueRouter ialah pemalam pengurusan penghalaan yang disediakan secara rasmi oleh Vue.js Ia boleh membantu kami melaksanakan navigasi halaman dan penukaran laluan dalam aplikasi Vue. Ciri Lazy-Loading ialah kelebihan unik VueRouter, yang boleh mengoptimumkan prestasi halaman dengan sangat baik. Dalam artikel ini, kami akan memperkenalkan ciri penghalaan Lazy-Loading VueRouter dan menyediakan beberapa contoh kod praktikal untuk mengoptimumkan prestasi halaman. Lazy-Loading bermaksud apabila diperlukan

Penyelesaian untuk bertindak balas penghala tidak dipaparkan: 1. Tambahkan browserRouter ke komponen penghalaan induk untuk membalut penghala 2. Gunakan "this.props.history.go()" untuk memuat semula komponen; 3. Tambahkan "forcerefresh" pada parameter browser; ={true}"; 4. Tulis fungsi cangkuk dalam "<Laluan>" dan panggilnya apabila meninggalkan atau memasuki laluan ini.

VueRouter ialah pengurus laluan rasmi dalam rangka kerja Vue.js. Ia membolehkan pembangun menukar kandungan halaman melalui pemetaan laluan, menjadikan aplikasi satu halaman lebih terkawal dan lebih mudah untuk diselenggara. Walau bagaimanapun, apabila aplikasi menjadi lebih kompleks, pemuatan dan penghuraian laluan boleh menjadi kesesakan prestasi. Untuk menyelesaikan masalah ini, VueRouter menyediakan fungsi pemuatan malas laluan, yang menangguhkan pemuatan laluan sehingga benar-benar diperlukan. Lazy-loading adalah teknologi pemuatan yang

Pembangun PHP sering menghadapi operasi pangkalan data semasa proses pembangunan laman web Sebagai sistem pengurusan pangkalan data yang sangat popular, pemisahan baca-tulis MySQL adalah salah satu cara penting untuk meningkatkan prestasi laman web. Dalam pembangunan PHP, melaksanakan pemisahan baca-tulis MySQL boleh meningkatkan keupayaan akses serentak tapak web dan pengalaman pengguna. Artikel ini akan memperkenalkan secara terperinci kaedah pelaksanaan pemisahan baca-tulis MySQL, dan menyediakan contoh kod PHP khusus untuk membantu pembangun PHP lebih memahami dan menggunakan fungsi pemisahan baca-tulis. Apakah yang dibaca oleh MySQL

1. Lompat laluan 1. Mula-mula perkenalkan API—useRouterimport{useRouter}from'vue-router'2 Tentukan pembolehubah penghala pada halaman lompat // Mula-mula tentukan constrouter=useRouter() dalam persediaan 3. Gunakan router.push to. lompat ke halaman //String router.push('home')//Object router.push({path:'home'})//
