Skip to content

n-collapse 折叠面板 ​

面板组容器:纵向排列 n-collapse-item 成员,承载手风琴(accordion,同时至多一个面板展开)与多开两种模式。适合 FAQ 问答、设置分组、分类列表等需要收纳内容的场景。

  1. 活动面板由 model-value(name 字符串数组)受控:成员点击标题后组按 accordion 语义计算新集合派发 change(参数为最新数组),回写由业务完成——组件支持 v-model,也可显式监听更新事件,双向绑定走 :model-value + @change="names = $event"
  2. accordion 模式下 model-value 至多一项(多余的取首项生效):点开一个面板自动收起其它,再点当前面板则整组收起
  3. border 是组外框描边,默认关闭:组件透明底、放进卡片等已有表面的容器是常态;贴页面画布直排时开启,补组完整性并避免与容器表面双线
  4. 组内最后一个面板的分隔线建议关闭(成员 :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-*)

记录 · 思考 · 创作