路由到上一个活动子组件

时间:2018-05-15 17:57:35

标签: vue.js vue-router vuex

我试图实现一个概念上简单的问题,但事实证明这是一个真正的痛苦。

我有嵌套的路线,如下所示:

-Foo
    -foo1 (default)
    -foo2
-Bar
    -bar1 (default)
        -fubar1 (default)
        -fubar2
    -bar2

FooBar是导航栏中的链接。他们的直接子路线在侧栏中,在单独的页面上。每当我路由到导航栏链接时,我都希望将他们最后一个活动的孩子路由到。

路由示例:

  1. 用户访问Foofoo1已激活。
  2. 用户访问foo2
  3. 用户访问Barbar1已激活。
  4. 用户访问bar2
  5. 用户访问Foofoo2已激活。 (Foo的最后一个活跃子项被路由到)
  6. 用户访问Barbar2已激活。 (Bar的最后一个活跃子项被路由到)
  7. 我目前的解决方案涉及组件导航保护:

    export default {
        ...,
        beforeRouteEnter (to, from, next) {
            next(vm => {
                let lastActive = vm.$store.state.lastActivePaths[vm.$options.name]
                if (lastActive) {
                    next(lastActive)
                } else {
                    next()
                }
            })
        },
        beforeRouteLeave (to, from, next) {
            this.$store.commit(SET_LAST_ACTIVE_PATH, {
                routeName: this.$options.name,
                path: from.path
            })
            next()
        },
    }
    

    Vuex:

    export default new Vuex.Store({
        state: {
            lastActivePaths: {},
        },
        mutations: {
            [SET_LAST_ACTIVE_PATH](state, payload) {
                let { routeName, path } = payload
                Vue.set(state.lastActivePaths, routeName, path)
            },
        },
    })
    

    它"工作",但它需要两个不同位置的逻辑,很快就会变得一团糟。有更简单的解决方案吗?

0 个答案:

没有答案