SilurianYang / uni-simple-router

A simple, lightweight 'uni-app' routing plugin
https://v2.hhyang.cn/v2/
MIT License
749 stars 163 forks source link

开发h5页面,嵌套路由,子路由切换时,会触发父路由所有生命周期钩子函数 #427

Closed liquor96 closed 1 year ago

liquor96 commented 2 years ago

问题描述 开发H5,使用了嵌套路由,子路由对应每个tabBar的tab,当点击tab时,使用this.$Router.push进入对应子路由,这个时候会触发父组件的created、mounted等生命周期钩子,直接用vue创建类似结构项目,切换子路由不会进created钩子,看了一圈文档都没找到在切换子路由时,如何阻止进入父组件的生命周期钩子函数?

复现步骤

// router.js
import {
    RouterMount,
    createRouter
} from 'uni-simple-router';

const router = createRouter({
    platform: process.env.VUE_APP_PLATFORM,
    h5: {
        vueRouterDev: true, //完全使用vue-router开发 默认 false  
    },
    routes: [{
        path: '/',
        name: 'router1',
        component: () => import('@/pages/index/index1.vue'),
        children: [{
                path: 'a',
                name: 'router1',
                component: () => import('@/pages/index/index.vue'),
                children: [{
                        // 当 /route1/children1 匹配成功,
                        // children1 会被渲染在 router1 的 <router-view> 中
                        path: 'route1/children1',
                        name: 'children1',
                        component: () => import('@/pages/tab/tab1.vue'),
                    },
                    {
                        // 当 /route1/:id 匹配成功,
                        // children1 会被渲染在 router1 的 <router-view> 中
                        path: 'route1/:id',
                        name: 'children2',
                        component: () => import('@/pages/tab/tab2.vue'),
                    }
                ]
            }
        ]
    }, ]
});
//全局路由前置守卫
router.beforeEach((to, from, next) => {
    next();
});
// 全局路由后置守卫
router.afterEach((to, from) => {
    console.log('跳转结束')
})

export {
    router,
    RouterMount
}

路由如上

预期结果 切换子路由时,不触发父组件的生命周期钩子函数

实际结果 每次切换子路由,都会把父组件的生命周期钩子函数触发一遍

系统信息:

补充信息

liquor96 commented 2 years ago

http://gitlab.hafengkeji.com/HuZhiYuan/baoxin-demo demo地址

SilurianYang commented 2 years ago

你需要一个根节点挂载点 在app.vue添加如下代码:

<template>
    <view>
        <router-view></router-view>
    </view>
</template>
SilurianYang commented 1 year ago

请关注 V3.0 版本,嵌套路由特性在 V3.0 版本中全平台可用