n-collapse 折叠面板
面板组容器:纵向排列 n-collapse-item 成员,承载手风琴(accordion,同时至多一个面板展开)与多开两种模式。适合 FAQ 问答、设置分组、分类列表等需要收纳内容的场景。
- 活动面板由
model-value(name 字符串数组)受控:成员点击标题后组按 accordion 语义计算新集合派发change(参数为最新数组),回写由业务完成——组件支持 v-model,也可显式监听更新事件,双向绑定走:model-value+@change="names = $event"- accordion 模式下
model-value至多一项(多余的取首项生效):点开一个面板自动收起其它,再点当前面板则整组收起border是组外框描边,默认关闭:组件透明底、放进卡片等已有表面的容器是常态;贴页面画布直排时开启,补组完整性并避免与容器表面双线- 组内最后一个面板的分隔线建议关闭(成员
:border="false"),避免与下一个区块的边界贴线
平台兼容性
| App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ小程序 |
|---|---|---|---|---|---|---|
| √ | √ | √ | × | × | × | × |
API
属性
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
| model-value | 活动面板 name 集合(accordion 模式下至多一项,多余的取首项);回写走 change | String[] | [] | - |
| accordion | 手风琴模式:同时至多一个面板展开,点开一个自动收起其它 | Boolean | false | - |
| border | 组外框描边(默认关;贴页面画布直排时开启补组完整性,放进已有表面的容器保持关闭避免双线) | Boolean | false | - |
| custom-class | 挂到根节点的额外 class(类需定义在组件样式表内) | String | "" | - |
| custom-style | 根节点行内样式,如 "margin-top:8px;border-radius:8px" | String | "" | 与 css 相同 |
事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| change | 面板开合翻转后触发,参数为最新活动面板 name 数组(accordion 模式收起后为空数组);配合 :model-value 组成手动双向绑定 | 最新集合(String[]) |
| open | 面板展开时触发(accordion 模式下被自动收起的面板不发) | 该面板的 name(String) |
| close | 面板收起时触发 | 该面板的 name(String) |
插槽
| 插槽名 | 说明 |
|---|---|
| default | 面板成员(n-collapse-item) |
实现说明
-
手风琴互斥统一在组内派生:初始化、外部赋值和动态切换 accordion 均只让 modelValue 首项生效;点击仍通过 change 回传下一集合。组件不改写调用者数组,关闭手风琴后恢复数组对应的多开状态。
-
机制对照(参考实现 vs 本组件):值通道取受控数组 + change 回写(无内部副本——副本与外部值存在双源不同步窗口,纯 props 派生更稳;手风琴语义在组内收口为"整组替换为该面板",成员只上报不自算);accordion 模式的活动值参考实现返回单字符串、多开返回数组,本组件统一为数组(手风琴是长度 1 的特例,类型稳定优于双形态);组的 open / close 提供面板粒度的方向监听(参数为面板 name)
-
组自身是纯逻辑容器(无视觉状态):成员经 inject 拿组上下文(活动集合 / 翻转上报 / 自动名序号),与复选框组同款通信结构
-
裁剪参考并集记录:组级背景色 props 不收(透明底是常态——面板组表面色由宿主决定,贴画布开 border 描边、进卡片关 border——默认 false 偏离 un 的 true:本库组件透明底,宿主表面是主流场景);程序化展开/收起方法(show / hide / toggle 一类)不收(受控组件直接改 model-value 即达,方法式翻页/翻面板是旁路状态通道)
-
主题令牌:组外框走全局描边色
--n-border;面板行内视觉令牌见 n-collapse-item(--n-collapse-*)