主应用页面内容布局

主页面内容包括

  • 头部
  • 面包屑导航
  • 子应用容器
    • 加载状态
    • 子应用内容
  • 底部信息

image.png

子应用注册

创建导航路由列表

  • 对应子应用页面路由,方便管理路由跳转

    1. export const NAV_LIST = [
    2. {
    3. name: '首页',
    4. status: true,
    5. value: 0,
    6. url: '/vue3/#/index',
    7. hash: '',
    8. },
    9. {
    10. name: '资讯',
    11. status: false,
    12. value: 1,
    13. url: '/react15#/information',
    14. },
    15. {
    16. name: '视频',
    17. status: false,
    18. value: 2,
    19. url: '/react15#/video',
    20. hash: '',
    21. },
    22. {
    23. name: '选车',
    24. status: false,
    25. value: 3,
    26. url: '/vue3/#/select',
    27. hash: '',
    28. },
    29. {
    30. name: '新能源',
    31. status: false,
    32. value: 4,
    33. url: '/vue2#/energy',
    34. hash: '',
    35. },
    36. {
    37. name: '新车',
    38. status: false,
    39. value: 5,
    40. url: '/react16#/new-car',
    41. hash: '',
    42. },
    43. {
    44. name: '排行',
    45. status: false,
    46. value: 6,
    47. url: '/react16#/rank',
    48. hash: '',
    49. },
    50. ]

    主应用路由跳转规划

  • 主应用和子应用都跳转到主应用的整体页面中

    1. const routes = [
    2. {
    3. path: '/',
    4. component: () => import('../App.vue'),
    5. },
    6. {
    7. path: '/react15',
    8. component: () => import('../App.vue'),
    9. },
    10. {
    11. path: '/react16',
    12. component: () => import('../App.vue'),
    13. },
    14. {
    15. path: '/vue2',
    16. component: () => import('../App.vue'),
    17. },
    18. {
    19. path: '/vue3',
    20. component: () => import('../App.vue'),
    21. },
    22. ];

    子应用容器

  • 子应用的加载和销毁,都在子应用容器中进行

    1. <div class="micro-main-body-container">
    2. <Loading v-show="loadingStatus"></Loading>
    3. <!-- 子应用容器 -->
    4. <div id="micro-container" v-show="!loadingStatus"></div>
    5. </div>

    子应用注册到微前端框架

    子应用列表

  • 微前端框架中,需要一个子应用列表来管理子应用,需要有以下信息

    1. {
    2. name: 'react15',// 唯一id
    3. entry: '//localhost:9002/', // 子应用入口地址
    4. container: '#micro-container', // 子应用渲染容器
    5. activeRule: '/react15', // 激活状态
    6. },
  • 完整子应用列表

    1. export const navList = [
    2. {
    3. name: 'react15',// 唯一id
    4. entry: '//localhost:9002/', // 子应用入口地址
    5. container: '#micro-container', // 子应用渲染容器
    6. activeRule: '/react15', // 激活状态
    7. },
    8. {
    9. name: 'react16',
    10. entry: '//localhost:9003/',
    11. container: '#micro-container',
    12. activeRule: '/react16',
    13. },
    14. {
    15. name: 'vue2',
    16. entry: '//localhost:9004/',
    17. container: '#micro-container',
    18. activeRule: '/vue2',
    19. },
    20. {
    21. name: 'vue3',
    22. entry: '//localhost:9005/',
    23. container: '#micro-container',
    24. activeRule: '/vue3',
    25. },
    26. ];

    注册子应用到微前端框架

  • 将子应用列表,注册到微前端框架进行管理

  • main/micro/start.js

    1. import { setList } from './const/subApps'
    2. export const registerMicroApps = (appList) => {
    3. // window.appList = appList;
    4. //! 设置子应用列表
    5. setList(appList);
    6. }
  • main/micro/const/subApps.js ```javascript let list = [];

export const getList = () => list export const setList = appList => list = appList ```

总结

主应用逻辑

  • 主应用整理逻辑大概如下图所示

5-2~3 中央控制器 - 主应用开发 - 图2

  • 通过切换不同的应用路由,获取到对应的页面
  • 然后通过微前端框架,将页面信息加载到子应用容器中(如果没有加载完成,显示loading页)

    子应用注册到微前端逻辑

  • 大致流程如下

5-2~3 中央控制器 - 主应用开发 - 图3