如何返回到 Vue Router 中具有给定名称的最后命名路由

How do I go back to the last named route with a given name in Vue Router

假设我有 5 条命名路线,Index、News、TaggedNews、NewsItem、TaggedNewsItem

我不认为 vue 路由器保存历史堆栈。您需要自己保存。

您可以使用 vuex 来跟踪历史堆栈并计算最后的不同路由路径,并在您需要的任何地方使用它。

实现可能类似于:

history.js

const history = {
    namespaced: true,
    state: {
        stack: [],
    },
    mutations: {
        PUSH_STACK(state, routeName) => state.stack.push(routeName),
    },
    actions: {
        pushStack({ commit }, routeName) => commit('PUSH_STACK', routeName),
    },
    getters: {
        lastDiff(state) {
            const reversed = state.stack.slice().reverse();
            const diff = reversed.findIndex(route => route !== reversed[0]);
            return -1 * diff;
        }
    }
}
export default { history }

store.js

import Vue from 'vue'
import Vuex from 'vuex'
import { history } from './history';

Vue.use(Vuex)

const store = new Vuex.Store({
    modules: {
        history
    }
})
export default { store }

将其包含在您的 main.js 文件中:

import Vue from 'vue';
import { store } from './store';

const app = new Vue({
    el: '#app',
    store
});

在您的路由器文件中,您可以添加一个 global after hook 以将路径名推送到商店,如下所示:

import { store } from './store';

const router = // router config

router.afterEach((to) => store.dispatch('history/pushStack', to.name));

在您的组件中,您可以像这样使用它:

const backN = this.$store.getters['history/lastDiff'];
this.$router.go(backN);