博客搭建(8)-后端返回动态路由

一.创建组件名称和组件对象对应表

在src/router/index.js中可以看到异步路由表,如下

但是这里面的component对应的是组件对象,但是后端只能返回字符串,所以我们需要把后端返回的组件字符串转换成组件对象,前端需要定义一个map数组来映射。

在src/router/index.js中定义组件map,如下

后端接口只需要返回如下格式:

二.定义请求接口

前端定义接口,修改请求

在src/api/user.js中定义请求方法:

在src/permission.js中可以看到获取路由并挂载的地方,如下:

在src/store/modules/permission.js中找到这个action,并修改如下

三.组件名称替换成组件对象

在上面这个文件中定义replaceComponent方法来替换组件名称,记得引入相关的变量和方法

最终前端会显示后端传过来的菜单,这里注意的是后端的路由格式,以及前端map数组的定义要正确

四.路由菜单表设计,及接口数据处理返回路由数据格式

下面我们将路由存放到数据库中,通过数据库读取,这里给出t_menu表(路由菜单表)的定义SQL如下:

-- ----------------------------
-- Table structure for t_menu
-- ----------------------------
DROP TABLE IF EXISTS `t_menu`;
CREATE TABLE `t_menu`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '路由名称',
  `path` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '路径',
  `component` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '组件名称',
  `hidden` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否隐藏',
  `alwaysShow` tinyint(1) NULL DEFAULT NULL COMMENT '设置一级菜单,是否总是显示',
  `redirect` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '面包屑是否重定向',
  `pid` int(11) NOT NULL DEFAULT 0 COMMENT '父路由',
  `roles` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '允许访问的角色',
  `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '左侧导航栏和面包屑显示名称',
  `icon` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '图标',
  `noCache` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否不要缓存',
  `affix` tinyint(1) NOT NULL DEFAULT 0 COMMENT '标签页是否总是显示',
  `breadcrumb` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否显示面包屑',
  `activeMenu` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '左侧菜单高亮',
  `create_time` datetime(0) NOT NULL COMMENT '创建时间',
  `update_time` datetime(0) NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `t_menu` VALUES (1, 'Permission', '/permission', 'Layout', 0, 1, '/permission/page', 0, 'admin,editor', 'Permission', 'lock', 0, 0, 1, '', '2021-03-23 13:16:07', '2021-03-23 13:16:12');
INSERT INTO `t_menu` VALUES (2, 'PagePermission', 'page', 'permission/page', 0, NULL, '', 1, 'admin', 'Page Permission', '', 0, 0, 1, '', '2021-03-23 13:31:12', '2021-03-23 13:31:14');
INSERT INTO `t_menu` VALUES (3, 'DirectivePermission', 'directive', 'permission/directive', 0, NULL, '', 1, '', 'Directive Permission', '', 0, 0, 1, '', '2021-03-23 13:33:27', '2021-03-23 13:33:29');
INSERT INTO `t_menu` VALUES (4, 'RolePermission', 'role', 'permission/role', 0, NULL, '', 1, '', 'Role Permission', '', 0, 0, 1, '', '2021-03-23 13:34:41', '2021-03-23 13:34:45');

这里后端接口的方法修改为如下:

formateMenu方法如下:

图连起来,截个完整。。。

上面是我新定义的一个路由页面,并使用了element-ui的组件,UI组件使用很方便,后面会继续写路由的管理更新及UI组件的使用

后面有连载!!!,有兴趣的可以去我的主页找对应博客搭建分栏,这里我就懒得放链接了

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

end for time

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值