Element Plus折叠面板怎么默认展开多个面板?
我用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'],但页面打开后两个都没展开,这是为啥?
v-model的值,但没生效通常只有两个原因:要么是数据类型没对上,要么是误开启了手风琴模式。我们得从原理上看看它是怎么判断展开的。组件内部会遍历你的
activeNames数组,然后拿每一项去跟el-collapse-item的name属性做对比。这里用的是全等比较(===),也就是说,类型必须完全一致。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数组里的元素是不是纯字符串。只要这两点没问题,页面一刷新肯定能看到两个面板同时展开。