在 Vue 2 中,我们通常使用 Element UI,而在 Vue 3 中,我们则使用 Element Plus 来获得类似的组件库功能。对于 Collapse 折叠面板组件,这两个库提供了相似的接口,但具体属性、事件和方法可能略有不同。以下将分别介绍 Vue 2 下的 Element UI Collapse 和 Vue 3 下的 Element Plus Collapse 的属性、事件和方法,并给出示例。
Vue 2 + Element UI Collapse
属性(Props)
value / v-model
: 绑定值,当前激活的面板的 name,可以使用 v-model 双向绑定。accordion
: 是否手风琴模式,即是否只允许同时展开一个面板。
事件(Events)
change
: 当前激活面板改变时触发,返回当前激活的面板的 name 和 index。
方法(通常不直接暴露,但可通过 $refs
访问内部方法,但 Element UI Collapse 通常不提供直接的方法)
Element UI 的 Collapse 组件通常不直接暴露方法供外部调用。
示例
vue
<template>
<el-collapse v-model="activeNames" @change="handleChange">
<el-collapse-item title="一致性" name="1">
<p>与用户的认知和操作习惯保持一致,尽量符合用户预期。</p>
</el-collapse-item>
<el-collapse-item title="反馈" name="2">
<p>控制反馈,给用户清晰、即时的反馈。</p>
</el-collapse-item>
<!-- 更多面板 -->
</el-collapse>
</template>
<script>
export default {
data() {
return {
activeNames: ['1'], // 默认展开第一个面板
};
},
methods: {
handleChange(val) {
console.log(val); // 当前展开的面板的 name 数组
},
},
};
</script>
Vue 3 + Element Plus Collapse
属性(Props)
model-value / v-model
: 绑定值,当前激活的面板的 key,可以使用 v-model 双向绑定。accordion
: 是否手风琴模式,即是否只允许同时展开一个面板。border
: 是否显示外边框。
事件(Events)
update:model-value
或@change
(使用.sync
修饰符时): 当前激活面板改变时触发,返回当前激活的面板的 key 和 index。
方法(通常不直接暴露)
Element Plus 的 Collapse 组件同样通常不直接暴露方法供外部调用。
示例
vue
<template>
<el-collapse v-model="activeKey" @change="handleChange">
<el-collapse-item title="一致性" name="1">
<p>与用户的认知和操作习惯保持一致,尽量符合用户预期。</p>
</el-collapse-item>
<el-collapse-item title="反馈" name="2">
<p>控制反馈,给用户清晰、即时的反馈。</p>
</el-collapse-item>
<!-- 更多面板 -->
</el-collapse>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const activeKey = ref('1'); // 默认展开第一个面板
function handleChange(val) {
console.log(val); // 当前展开的面板的 key
}
return {
activeKey,
handleChange,
};
},
};
</script>
注意:在 Vue 3 和 Element Plus 中,我们使用了 Composition API (ref
和 setup
函数) 来定义响应式数据和函数。然而,对于简单的用例,你仍然可以使用 Vue 3 的 Options API(类似于 Vue 2 的方式),这取决于你的个人偏好和项目需求。
此外,Element Plus 的 v-model
绑定属性在 Vue 3 中被重命名为 model-value
以符合 Vue 3 的响应式系统变化,但通常你仍然可以直接使用 v-model
并让 Vue 自动处理这一转换。如果你想要显式监听 model-value
的变化,可以使用 @update:model-value
事件,但在大多数情况下,简单地使用 @change
就足够了,因为 Element Plus 组件通常会为 v-model
绑定提供一个名为 change
的事件来通知变化。然而,请注意,Element Plus 的官方文档应始终作为最终参考。