Element Plus折叠面板怎么默认展开多个面板?

小翠翠 阅读 5

我用Element Plus的Collapse组件,想让页面加载时默认展开多个面板,但文档里只看到activeNames可以设一个字符串或数组,我试了传数组进去却没生效,控制台也没报错。

我的代码是这样写的:

<el-collapse v-model="activeNames">
  <el-collapse-item title="面板1" name="1">内容1</el-collapse-item>
  <el-collapse-item title="面板2" name="2">内容2</el-collapse-item>
</el-collapse>

在data里初始化:activeNames: ['1', '2'],但页面打开后两个都没展开,这是为啥?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
耘郗
耘郗 Lv1
这个问题其实很典型,关键在于数据类型的严格匹配以及组件模式的配置。你传数组这个思路是对的,Element Plus 在非手风琴模式下确实接收数组作为 v-model 的值,但没生效通常只有两个原因:要么是数据类型没对上,要么是误开启了手风琴模式。

我们得从原理上看看它是怎么判断展开的。组件内部会遍历你的 activeNames 数组,然后拿每一项去跟 el-collapse-itemname 属性做对比。这里用的是全等比较(===),也就是说,类型必须完全一致。

HTML 属性 name="1" 拿到的是字符串 '1',所以你在 data 里初始化数组时,必须是 ['1', '2']。如果你不小心写成了 [1, 2](数字),或者 ['1', 2](混合),匹配就会失败,面板自然就不会展开。你描述里写的是 ['1', '2'],这点是对的,但很多人容易在这个细节上栽跟头。

另外一个很隐蔽的坑是 accordion 属性。你去检查一下你的 标签上有没有加 accordion。一旦加了这个属性,组件就变成了手风琴模式,这就意味着同一时间只能展开一个面板。在这种模式下,v-model 绑定的值类型必须是字符串,而不是数组。如果你传了数组给手风琴模式的组件,它大概率会直接忽略掉,导致一个都展不开。

既然你用的是 Element Plus(Vue 3 版本),我给你写一份完整的 Options API 示例代码,你可以直接对比一下你的写法。这里我特意把数据类型和属性都标注清楚了。





如果上面的代码你还是没跑通,还有个极小的可能性是响应式丢失。虽然你在 data 里声明通常没问题,但如果你后续操作数组时用了直接下标赋值或者改变长度,Vue 3 可能检测不到。不过在初始化阶段,只要类型对上,是肯定能展开的。

你可以先把你代码里的 accordion 属性删了试试,如果有的话;然后确认一下 activeNames 数组里的元素是不是纯字符串。只要这两点没问题,页面一刷新肯定能看到两个面板同时展开。
点赞
2026-03-04 12:06