为什么同一节点v-for和v-if不能一起使用

因为v-for的优先级比v-if高,意味着v-if 将分别重复运行于每个 v-for 循环中

当你需要在ECharts的`el-table`组件中集成SortableJS实现树形结构的拖拽排序时,你需要确保数据结构支持层次关系,并对SortableJS做一些定制化设置。以下是一个简单的示例,假设你的数据结构是一个数组嵌套的对象,每个对象都有一个`parentKey`属性表示其父级节点: ```javascript import { ElTable, TableColumn } from 'element-plus'; import Sortable from 'sortablejs'; // 假设你有如下的树形结构数据 const treeData = [ { id: 1, name: '一级节点A', children: [ { id: 2, name: '二级节点A1', parentKey: 1 }, { id: 3, name: '二级节点A2', parentKey: 1 }, ], }, // 其他节点... ]; function getChildren(node) { return node.children || []; } // 初始化SortableJS实例并限制排序范围 Sortable.create(treeData, { group: '__tree__', onEnd: (evt) => { const sortedData = [...treeData]; sortedData.sort((a, b) => a.id - b.id); // 按id进行简单排序,你可以根据实际需求调整排序规则 // 验证是否在同一层级,如果不是则恢复原样 for (let i = 0; i < sortedData.length; i++) { const childNodes = getChildren(sortedData[i]); if ( childNodes.some((child) => sortedData.indexOf(child) !== i + childNodes.findIndex( (grandChild) => grandChild.parentKey === sortedData[i].id ) ) ) { console.log('尝试跨层级拖拽,操作已撤销'); return; } } // 更新原始数据 treeData.splice(0, treeData.length, ...sortedData); }, }); // el-table配置 <template> <div> <ElTable :data="treeData" border style="width: 100%" :columns="[ { prop: 'name', label: 'Name', width: 200 }, // 如果需要显示其他列,添加相应列配置... ]" > <!-- 为了拖拽排序,我们只在name列添加SortableJS的列插件 --> <template #default="{ row }"> {{ row.name }} <SortableElement v-if="row.children && row.children.length"> <ul> <li v-for="(item, index) in row.children" :key="item.id">{{ item.name }}</li> </ul> </SortableElement> </template> </ElTable> </div> </template> <script> export default { data() { return { treeData, }; }, }; </script> <style scoped> SortableElement { display: flex; flex-direction: column; } </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值