基于element-ui的穿梭框(el-transfer)实现点击上下移动
在Element UI中,el-transfer
组件本身不支持点击选中的列表项直接上移或下移。但你可以通过自定义逻辑来实现这个功能。以下是一个简单的示例,展示了如何在Vue中使用Element UI的el-transfer
组件实现点击上移或下移的功能:
<template>
<el-transfer
v-model="value"
:data="data"
:filterable="false"
:filter-method="filterMethod"
:render-content="renderContent"
@change="handleChange"
></el-transfer>
</template>
<script>
export default {
data() {
return {
value: [],
data: this.generateData(),
};
},
methods: {
generateData() {
const data = [];
for (let i = 1; i <= 15; i++) {
data.push({
key: i,
label: `Option ${i}`,
});
}
return data;
},
filterMethod(query, item) {
return item.label.indexOf(query) > -1;
},
renderContent(h, { node }) {
return h('span', { class: 'custom-tree-node' }, node.label);
},
handleChange(value, direction, movedKeys) {
if (direction === 'right') {
const currentValue = this.value;
movedKeys.forEach(key => {
const index = currentValue.indexOf(key);
if (index > -1) {
this.data.splice(index, 1);
this.data.unshift(...this.data.splice(index, 1));
}
});
}
},
},
};
</script>
在这个示例中,我们定义了一个data
数组来模拟数据源,并通过v-model
绑定了选中的值。我们还禁用了内置的过滤功能,并提供了一个自定义的render-content
来定制列表项的渲染。
handleChange
方法用于处理右侧列表项发生变化时的情况。当移动操作发生在右侧时(即direction === 'right'
),我们会根据movedKeys
数组移动相应的数据项。在这个例子中,我们实现了上移操作,通过splice
方法移除选中的元素,并将其插入到数据源的开始位置。
请注意,这个示例只是一个简化的实现,并且没有考虑所有边缘情况。在实际应用中,你可能需要添加更多的校验和错误处理逻辑。
评论已关闭