当前位置: 首页 > article >正文

Vue功能菜单的异步加载、动态渲染

        实际的Vue应用中,常常需要提供功能菜单,例如:文件下载、用户注册、数据采集、信息查询等等。每个功能菜单项,对应某个.vue组件。下面的代码,提供了一种独特的异步加载、动态渲染功能菜单的构建方法:

<script setup>
import {defineComponent, getCurrentInstance, h} from 'vue'

//定义需要显示的功能菜单项
const menus = [
  {id: 'home', name: '首\u3000页'},
  {id: 'user.login', name: '用户登录'},
  {id: 'user.regist', name: '用户注册'},
  {id: 'college.list', name: '学院风采'},
  {id: 'query.student', name: '学生查询'},
  {id: 'enroll.chart', name: '招生一览'},
  {id: 'upload.docs', name: '资料上传'},
  {id: 'chat.room', name: '畅论空间'}
]
const app = getCurrentInstance().appContext.app                        //当前Vue应用
//异步加载.vue组件并注册
Promise.all( 
    menus.map(({id}) => id === 'home' ?
        {__name: id, setup: null, render: null} : import(`./modules/${id}.vue`))
).then(modules => modules.forEach(m => app.component(m.__name, m)))    //注册组件
const store = app.config.globalProperties.$pinia._s.get('loginer')     //状态管理数据
//动态渲染功能菜单项
const AppMenu = defineComponent({              //定义功能菜单组件
  render() {
    return h('div', {class: 'home-menu'},
                h('ul', {class: 'home-ul'},    //用无序列表构建菜单项
                    menus.map(({id, name}) =>
                        h('li', {              //无序列表的列表项,对应功能菜单项
                          id: id,              //模块id
                          innerText: name,     //菜单名
                          onClick: event => store.setModule(event.target.id) //加载模块
                }))
        ))
  }
})
</script>

<template>
  <app-menu></app-menu>
</template>

         上述处理,需要细细琢磨。提示:.vue组件解析、编译后的基本构成要素为:{__name: '组件id', setup: {组合式函数}, render: {渲染函数}}。需要充分认识这一特点,才能更好地理解上述处理方法。

        该方法的应用实战,请参阅:响应式项目(RxJS+Vue.js+Spring)大决战(5):主页的实现(前端视图模块)


http://www.kler.cn/a/390111.html

相关文章:

  • 项目集章程program charter
  • 基于Python+Django+Vue3+MySQL实现的前后端分类的商场车辆管理系统
  • Blender进阶:图像纹理节点和映射节点
  • [CKS] K8S ServiceAccount Set Up
  • 【系统设计】数据库压缩技术详解:从基础到实践(附Redis内存优化实战案例)
  • 「数据要素」行业简报|2024.11.上刊
  • URL、DNS、IP介绍及特点
  • GitHub 上的开源项目推荐
  • PHP弱类型安全问题
  • React前端开发
  • 虚拟化数据恢复—ESXi虚拟机数据恢复案例
  • 蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)
  • 阿里云Linux安装Docker服务报错问题
  • SpringBoot(十一)SpringBoot上传文件
  • 2024年11月11日Github流行趋势
  • 2023年12月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析
  • 使用CSS和JavaScript实现动画效果
  • 河南测绘资质办理注意事项
  • GIT的基本使用与进阶
  • Rust里面针对Option和Result的and_then和map有什么区别
  • Kafka 分区的目的?
  • 【PGCCC】Postgresql 编写自定义 C 函数
  • Spring Boot - 扩展点 EnvironmentPostProcessor源码分析及真实案例
  • Python实现PageRank算法
  • 好算法的特性
  • Ubuntu 的 ROS2 操作系统turtlebot3环境搭建