解决vue2+vue-router动态路由添加及路由刷新后消失问题

 更新时间:2024年08月16日 10:25:57   作者:白臻  
这篇文章主要介绍了解决vue2+vue-router动态路由添加及路由刷新后消失问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

使用的是vue2 +vuex

在http文件下新建api文件 menu.js文件

import { getData } from "@/http/api.js";
import store from "@/store/index.js";
import router from "@/router/index.js";
export const getMenu = () => {
  return new Promise((resolve) => {
    var InfoItem = {
      // JobNumber: system_params.UserName ,
      JobNumber: 10086,
      DeviceType: "WEB",
    };
    var newInfoItem = JSON.stringify(InfoItem);
    var InfoList = {
      A: 7,
      B: 1,
      C: 1,
      // UserId: system_params.UserName,
      UserId: 10086,
      Data: newInfoItem,
    };
    getData(InfoList).then((res) => {
      if (res.Code === 200 || res.Msg === "") {
        let result = JSON.parse(res.Data);
        let routeTree = JSON.parse(result.List);
        store.commit("setUserRouters", routeTree);
        initRoute(routeTree);
        console.log(router);
        resolve(routeTree);
      }
    });
  });
};
function initRoute(menu) {
  if (menu && menu.length > 0) {
    menu.forEach((element) => {
      let obj = {
        path: "/" + element.menuUrl, // 仓库管理--仓库
        component: () =>
          import(`@/views/stockInfo/wareHouseManage/${element.menuUrl}.vue`),
        meta: {
          title: element.menuName,
          path: "/" + element.menuUrl,
        },
      };
      //添加路由
      router.addRoute("index", obj);
      if (element && element.Children && element.Children.length > 0) {
        return initRoute(element.Children);
      }
      console.log("router===>", router);
    });
  }
}

在store文件里

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

// 公共状态
const state = {
 
  userRoutes: [],
};

const mutations = {

  setUserRouters(state, payload) {
   
    state.userRoutes = payload;
  },
};

export default new Vuex.Store({
  actions,
  mutations,
  state,
  getters,
});

获取后台数据

  async mounted() {
    // 从后台获取路由数据
    const mRoutes = getMenu();
    this.menus = await mRoutes;
  },

动态路由刷新后消失解决办法

//全局前置路由守卫————初始化的时候被调用、每次路由切换之前被调用
router.beforeEach((to, from, next) => {
 
  if (load === 0) {
    load++;
    getMenu();
    
    next({ path: to.fullPath });
  }
  next();
  
});

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 前端低代码form-generator实现及新增自定义组件详解

    前端低代码form-generator实现及新增自定义组件详解

    这篇文章主要给大家介绍了关于前端低代码form-generator实现及新增自定义组件的相关资料,form-generator是一个开源的表单生成器,可以帮助我们快速构建各种表单页面,需要的朋友可以参考下
    2023-11-11
  • VueJS实现用户管理系统

    VueJS实现用户管理系统

    这篇文章主要为大家详细介绍了VueJS实现用户管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Vue2中Class Component的使用指南

    Vue2中Class Component的使用指南

    Vue.js 以其简单易用和灵活性受到了广大开发者的喜爱,然而,随着项目的复杂度增加,组件的管理和组织也变得越来越重要,下面我们就来看看如何通过vue-class-component编写更加优雅和结构化的组件
    2024-11-11
  • Vue-router不允许导航到当前位置(/path)错误原因以及修复方式

    Vue-router不允许导航到当前位置(/path)错误原因以及修复方式

    本文主要介绍了Vue-router不允许导航到当前位置(/path)错误原因以及修复方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • vue项目配置国际化$t('')的介绍和用法示例

    vue项目配置国际化$t('')的介绍和用法示例

    这篇文章主要给大家介绍了关于vue项目配置国际化 $t('')的介绍和用法的相关资料,多语言和国际化现在已经成为一个网站或应用的必要功能之一,Vue作为一款流行的前端框架,在这方面也有着灵活的解决方案,需要的朋友可以参考下
    2023-09-09
  • vue computed无法得到this的属性或方法的解决

    vue computed无法得到this的属性或方法的解决

    这篇文章主要介绍了vue computed无法得到this的属性或方法的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 可能是vue中使用axios最详细教程

    可能是vue中使用axios最详细教程

    Axios是一个基于Promise用于浏览器和nodejs的HTTP客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范,下面这篇文章主要给大家介绍了关于vue中使用axios最详细教程的相关资料,需要的朋友可以参考下
    2022-08-08
  • 解决iview打包时UglifyJs报错的问题

    解决iview打包时UglifyJs报错的问题

    下面小编就为大家分享一篇解决iview打包时UglifyJs报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 在vue2 中使用 tailwindcss的方法 亲测可用

    在vue2 中使用 tailwindcss的方法 亲测可用

    这篇文章主要介绍了在vue2 中使用 tailwindcss的方法 亲测可用,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 详解vue样式穿透的几种方式

    详解vue样式穿透的几种方式

    本文主要介绍了vue样式穿透的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论