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

微信小程序:实现左侧菜单、右侧内容、表单、新增按钮等组件封装

一、实现效果

左侧菜单,联动右侧列表数据,可实现页面的数据编辑和新增功能

二、主页面实现

1、主页面引入组件

引入组件二级菜单和列表组件

2、视图层

(1)引入菜单组件

直接写入组件two-menu,并写入参数菜单的数据项menu-list,选中的菜单项current-index,选择的方法onMenuSelect

(2)引入列表项

引入列表list,并写入参数如下:

属性名

类型

含义

items

Array

要展示的数据列表,例如:[ { id: 1, name: '螺丝' }, ... ]

display-config

Array

字段配置数组,决定哪些字段显示、怎么显示、是否只读等

show-avatar

Boolean

是否显示头像列(通常是图片或图标)

show-edit-button

Boolean

是否显示“编辑”按钮

show-add-button

Boolean

是否显示“新增”按钮(有些组件可能不支持这个)

page-size

Number

每页显示多少条数据(分页用)

total-items

Number

总共有多少条数据(用于计算总页数)

edit-url

String

编辑接口地址,传给子组件内部使用(如点击编辑时调用)

delete-url

String

删除接口地址,传给子组件内部使用

add-url

String

新增接口地址,传给子组件内部使用

3、逻辑层

写入基本数据,并写入回调的方法,这里的列表字段displayConfig是定义在data中的,其实也可以直接方法后端的

功能

说明

data

定义页面数据结构,包括分页、字段配置、接口地址等

onLoad()

页面加载时调用fetchData()获取数据

fetchData()

请求接口数据,并做分类、分页处理

onMenuSelect()

菜单切换时,更新当前分类下的数据

handleListItemEdit()

处理编辑事件

handleListItemDelete()

处理删除事件

 4、样式层

主要是写入主要的布局部分,主要是将左侧展示位菜单,右侧展示位列表

三、菜单组件

1、视图层(WXML)

  • scroll-view:滚动容器,设置 scroll-y 表示竖向滚动。
  • wx:for:循环渲染菜单项列表 menuList
  • wx:key="index":使用索引作为唯一标识符。
  • class="menu-item ...":每个菜单项的类名,通过 {{currentIndex === index ? 'active' : ''}} 判断是否为当前选中项。
  • data-index="{{index}}":绑定当前项的索引值,用于点击时获取。
  • bindtap="handleTap":绑定点击事件处理函数。

2、样式层(WXSS)

  • .menu:定义菜单整体样式,宽度固定,背景色浅灰。
  • .menu-item:菜单项基础样式,包括高度、字体大小、居中等。
  • .menu-item.active:当前激活项的高亮样式,包括背景、颜色、加粗和左侧边框。

3、逻辑层(JS)

  • properties
    • menuList:传入的菜单数组,如 [{"categorytop": "五金"}, {"categorytop": "电子"}]
    • currentIndex:当前选中项索引,默认为 0
  • handleTap
    • 点击菜单项后获取其索引;
    • 使用 triggerEvent 触发自定义事件 select,并传递当前索引给父组件。

4、JSON配置

  • "component": true:声明这是一个自定义组件;
  • "usingComponents":引入其他子组件,这里引入了 list-item 组件,用于后续展示内容区域。

5、总结

层级

内容

视图层(WXML)

渲染菜单项,绑定点击事件

样式层(WXSS)

定义菜单样式和高亮效果

逻辑层(JS)

处理点击事件并向外抛出选中索引

组件通信

通过triggerEvent实现父子组件交互

四、列表组件

1、视图层解析(WXML)​

(1)​​列表展示​

使用 wx:for 渲染 items 数据

动态显示字段(displayConfig 控制)

支持头像显示(showAvatar 控制)

​(2)分页导航​

上一页/下一页按钮(handlePrevPage/handleNextPage

显示当前页和总页数

(3)​​表单弹窗​

通过 form-popup 组件实现编辑/新增表单

动态设置标题(formTitle 区分新增/编辑)

(4)​​新增按钮​

  • 条件渲染(showAddButton 控制)
  • 点击触发 onAddTap 打开空表单

​2、逻辑层解析(JS)​

​(1)数据与状态​

items: 列表数据

editingItem: 当前编辑项(null 为新增,{} 为编辑)

formTitle: 动态表单标题

​(2)核心方法​

handleEditTap​: 打开编辑表单(传入当前项)

onAddTap​: 打开新增表单(传入空对象)

handleFormSubmit​: 提交表单(触发 edit 事件)

handleFormDelete​: 删除数据(触发 delete 事件)

​分页逻辑​​: 更新页码并触发 pagechange 事件

​事件传递​

表单操作通过 triggerEvent 通知父组件(如 refresheditdelete


3、​​JSON 配置解析​

{"component": true,"usingComponents": {"form-popup": "/components/form-popup/index","add-info": "/components/add-btn/index"}
}
  • ​组件化配置​​: 声明依赖的子组件(form-popup 和 add-info
  • ​独立作用域​​: 通过 component: true 标记为自定义组件

​4、关键交互流程​

(1)​​编辑流程​

点击编辑按钮 → handleEditTap → 填充表单 → 提交 → handleFormSubmit → 父组件处理

​(2)新增流程​

点击新增按钮 → onAddTap → 打开空表单 → 提交 → handleFormSubmit → 父组件处理

(3)​​删除流程​

点击删除 → handleFormDelete → 父组件处理

​(4)分页流程​

  • 翻页 → 触发 pagechange → 父组件重新加载数据

五、表单组件

1、视图层解析 (WXML)

  • 弹窗模式结构

    • ​modal-mask​
http://www.xdnf.cn/news/14514.html

相关文章:

  • 蜻蜓Q系统的技术演进:从Laravel 6到Laravel 8的升级之路-优雅草卓伊凡
  • web3 浏览器注入 (如 MetaMask)
  • 如何获取 vscode 的 vsix 离线插件安装包
  • jmeter学习
  • JETBRAINS IDE 开发环境自定义设置快捷键
  • MySQL存储引擎深度解析:InnoDB、MyISAM、MEMORY 与 ARCHIVE 的全面对比与选型建议
  • FPGA基础 -- Verilog行为级建模之alawys语句
  • 【深度学习】卷积神经网络(CNN):计算机视觉的革命性引擎
  • 最新期刊影响因子,基本包含全部期刊
  • OpenStack入门体验
  • Oracle 详细解析及与 MySQL 的核心区别
  • AI时代的质量显得更为重要
  • 自动打电话软件设计与实现
  • 支持selenium的chrome driver更新到137.0.7151.119
  • 一站式用AI编程神奇Cursor/Trae(VScode环境)开发运行Scala应用
  • 《Effective Python》第九章 并发与并行——使用 Queue 实现并发重构
  • 【力扣 中等 C】2. 两数相加
  • 机器学习常用评估指标
  • win10/win11 快速隐藏/显示桌面图标
  • 亚矩阵云手机+Whatnot:直播电商的自动化增长引擎
  • Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(RDB篇)
  • SSL安全证书:数字时代的网络安全基石
  • 如何在 MX Linux 上安装 Blender CAD 软件
  • 学生成绩管理系统
  • 4. 时间序列预测的自回归和自动方法
  • 【MySQL】MySQL 数据库操作与设计
  • 使用 Java + WebSocket 实现简单实时双人协同 pk 答题
  • 【matlab】图片转视频
  • 网络编程TCP与UDP
  • 02 ( chrome 浏览器插件, 立马翻译), 搭建本地 api