如图所示,根据响应回显的勾选框,怎么把这些已经选中的优先显示在最前面,0006,0007,0008放在最上面。
//假设这是从后端返回来的table data数据
let tableData = [{id:'0003',desc1:'体重指数',desc2:'体重指数'},{id:'0004',desc1:'收缩压',desc2:'收缩压'},{id:'0006',desc1:'视力1',desc2:'视力1'},{id:'0007',desc1:'视力2',desc2:'视力2'}];
//假设这是从后端返回来的checkedItemIds
let checkedItemIds = ["0006","0007"];
//把tableData设置一下选中标志,以便进行排序
tableData.forEach(v=>{
v.checked = checkedItemIds.includes(v.id)? 1 : 0;
});
//排序
tableData.sort((a,b) => {return b.checked - a.checked;});
之后你可以把这段代码做成一个function,1.在第一次渲染(例如onMounted()时候)调用一次,2. 在checkbox 选中和非选中之间切换的时候再次调用。
不太清除你的数据和页面是怎么组织的,如果方便的话你可以用一个数组,如下:
[{id:'0003',checked:0,desc1:'体重指数',desc2:'体重指数'},{id:'0004',checked:0,desc1:'收缩压',desc2:'收缩压'},{id:'0006',checked:1,desc1:'视力1',desc2:'视力1'},{id:'0007',checked:1,desc1:'视力2',desc2:'视力2'}]
那么通过数组的排序sort 方法可以将选中的放到前面。
let data = [{id:'0003',checked:0,desc1:'体重指数',desc2:'体重指数'},{id:'0004',checked:0,desc1:'收缩压',desc2:'收缩压'},{id:'0006',checked:1,desc1:'视力1',desc2:'视力1'},{id:'0007',checked:1,desc1:'视力2',desc2:'视力2'}];
data.sort((a,b) => {return b.checked - a.checked;});
//这时候data里边就排好序了,再次渲染列表就可以了
楼上正解,初始化的时候可以这么做,可以给checkbox绑定选中方法,选中的时候获取该行的index,然后在数组中给他提到最前就行
解决了吗?