• SPA项目动态树、数据表格、分页、CRUD、表单验证


    前言

           上一篇文章分享了SPA项目实现首页的导航条以及左侧菜单。本篇文章将要完善SPA项目的功能。将左侧菜单动态绑值,完成页面的数据表格、分页。对其进行增删改查以及增加、修改的表单验证。


    一、动态树

            原来我们的左侧树菜单是定死的数据,但是我们现在要将它盘活。将它绑为数据库的数据。

            确定模板,我们只有二级菜单,所以改一下之前的界面,得到数据通过v-for将数据绑定到左侧菜单就OK。

            调用后台接口获得,左侧树节点的内容。将数据绑定到界面。

            新建需要跳转页面的菜单项的路由,这里我们用文章管理做示例。因为跳转的地方是在AppMain里面,所以这个路由是AppMain的子路由。

            做好路由的关系映射后,就可以测试看效果。

    实现步骤: 

    1、确定导航菜单的结构

    2、el-menu组件实现路由跳转当前项

    3、获得数据

    4、绑定数据

    5、新建菜单项的路由

    6、做好路由映射关系

    7、测试

    具体的实现步骤就不展示了。直接放代码,可以自己根据实现步骤来完成。 

    注意事项:

    注1:要实现路由跳转,先要在el-menu标签上添加router属性,然后只要在每个el-menu-item标签内的index属性设置一下url即可实现点击el-menu-item实现路由跳转。
     

    注2:导航当前项,在el-menu标签中绑定  :default-active="$route.path",注意是绑定属性,
               不要忘了加“:”,当$route.path等于el-menu-item标签中的index属性值时则该item为当前项。

            LeftNav.vue 

    1. <template>
    2. <el-menu router :default-active="$route.path" default-active="2" class="el-menu-vertical-demo" background-color="#334157" text-color="#fff"
    3. active-text-color="#ffd04b" :collapse="collapsed">
    4. <div class="logobox">
    5. <img class="logoimg" src="../assets/img/logo.png" alt="">
    6. div>
    7. <el-submenu :index="'id_'+m.treeNodeId" v-for="m in menus">
    8. <template slot="title">
    9. <i :class="m.icon">i>
    10. <span>{
    11. {m.treeNodeName}}span>
    12. template>
    13. <el-menu-item :key="'id_'+m2.treeNodeId" :index="m2.url" v-for="m2 in m.children">
    14. <i :class="m2.icon">i>
    15. <span>{
    16. {m2.treeNodeName}}span>
    17. el-menu-item>
    18. el-submenu>
    19. el-menu>
    20. template>
    21. <script>
    22. export default {
    23. data() {
    24. return {
    25. collapsed: false,
    26. // 存放所有一级菜单
    27. menus:[]
    28. }
    29. },
    30. created() {
    31. let url = this.axios.urls.SYSTEM_MENU_TREE;
    32. this.axios.post(url, {}).then(resp => { //代表成功
    33. console.log(resp);
    34. this.menus = resp.data.result;
    35. }).catch(function() { //代表失败
    36. });
    37. this.$root.Bus.$on('collapsed-aside', (v) => {
    38. this.collapsed = v;
    39. })
    40. }
    41. }
    42. script>
    43. <style>
    44. .el-menu-vertical-demo:not(.el-menu--collapse) {
    45. width: 240px;
    46. min-height: 400px;
    47. }
    48. .el-menu-vertical-demo:not(.el-menu--collapse) {
    49. border: none;
    50. text-align: left;
    51. }
    52. .el-menu-item-group__title {
    53. padding: 0px;
    54. }
    55. .el-menu-bg {
    56. background-color: #1f2d3d !important;
    57. }
    58. .el-menu {
    59. border: none;
    60. }
    61. .logobox {
    62. height: 40px;
    63. line-height: 40px;
    64. color: #9d9d9d;
    65. font-size: 20px;
    66. text-align: center;
    67. padding: 20px 0px;
    68. }
    69. .logoimg {
    70. height: 40px;
    71. }
    72. style>

            router/index.js

     路由关系映射

    1. import Vue from 'vue'
    2. import Router from 'vue-router'
    3. import HelloWorld from '@/components/HelloWorld'
    4. import Login from '@/views/Login'
    5. import Reg from '@/views/Reg'
    6. import AppMain from '
  • 相关阅读:
    柚子树环割机设计
    Windows10系统开启SNMP服务
    基于微前端qiankun的多页签缓存方案实践
    【RTS】李宇翔 monibuca 讲座 学习
    机器人中的数值优化(八)——拟牛顿方法(上)
    启发式合并、DSU on Tree
    C语言程序设计教程(第三版)李凤霞 第十一章课后习题答案
    关于建立开放的学术论文共享平台的倡议
    5G专网融合时间敏感网络架构技术
    【每日一题】1109. 航班预订统计
  • 原文地址:https://blog.csdn.net/qq_62331938/article/details/126834836