• Vue——vue3+element plus实现多选表格使用ajax发送id数组


    代码来源:

    Vue 3结合element plus(问题总结二)之 table组件实现多选和清除选中(在vue3中获取ref 的Dom)_multipletableref.value.togglerowselection()打印出来的是u_子时不睡的博客-CSDN博客

    前言

    为了实现批量删除功能的功能需要用到多选表格,自己用vue实现很麻烦,遂上上网查找.

    终于找到了上面的文章。

    实现结果图

    如下一个是前端的图,一个是后端的图,点击批量删除之后就可以看见三个元素的id被发送到后端了。虽然前端页面还是没有变,不过实际已经算是删除了。要刷新页面可以在success回调方法中再获取一次列表数据。

    代码实现

    实现思路

    按照原文博主说的,因为这个表格代码原本是用ts写的,有两个方法用ts时可以找到,用js里面找不到,原因是vue3获取ref绑定的dom元素失败,并且好像也不能在onMounted钩子函数里面获取到(没试过)。然后直接在setup或是onMounted里面使用了getCurrentInstance()获取了整个vue组件的实例。

    然后在实例的refs上发现了表格绑定的那一个dom元素的代理对象,获取到了这个dom元素的代理响应式对象。

    在该实例的refs区域可以看见有表格的dom元素绑定的ref变量的代理对象

    Vue3 学习笔记 —— toRefs_...torefs_tanleiDD的博客-CSDN博客看这个toRefs方法

     这里如果不使用teRefs转的话就有如下,说它不是方法,也就是使用代理对象没法使用里面的方法

    用了toRefs它就说收到一个普通对象?什么傻逼玩意真有它的.


     

    然后使用toRefs方法_将表格的代理对象转换转换为普通对象,普通对象里面属性都变成了ref的,然后可以看见里面有需要的两个方法。

    下图是直接表格的代理对象转换为普通对象后找到的两个方法结果

     

    前端控制台输出

    后端代码

    1. @PostMapping("/posts/add2")
    2. public String add2post(@RequestBody Content content){
    3. for(int i=0;i
    4. System.out.println(content.getContent()[i]);
    5. if(content!=null)
    6. return "success";
    7. return "error";
    8. }

    前端代码

    1. <template >
    2. <div id="shoplist">
    3. <el-table ref="multipleTableRef" :data="data.arr" style="width: 100%" height="90%" stripe
    4. @selection-change="handleSelectionChange">
    5. <el-table-column type="selection" width="40" />
    6. <el-table-column property="shopname" label="店名" width="120" show-overflow-tooltip />
    7. <el-table-column property="score" label="评分" sortable width="80" />
    8. <el-table-column property="sales" label="销量" sortable width="80" />
    9. <el-table-column property="type" label="类型" width="70" />
    10. el-table>
    11. <div style="margin-top: 20px; margin-left:20px">
    12. <el-button @click="toggleSelection(data.arr)">全选el-button>
    13. <el-button @click="toggleSelection()">清除el-button>
    14. <el-button @click="delete_post">批量删除el-button>
    15. div>
    16. div>
    17. template>
    18. <script>
    19. import { onMounted, ref } from 'vue';
    20. import { getCurrentInstance } from 'vue'
    21. import { reactive, toRefs } from '@vue/reactivity';
    22. import $ from 'jquery'
    23. export default {
    24. name: 'ElementView',
    25. setup() {
    26. const instance = getCurrentInstance(); //这个玩意不能用在生产环境好像
    27. const multipleTableRef = ref(null);
    28. const multipleSelection = ref([])
    29. const data2 = ref([])
    30. const list = reactive([])
    31. var toggleSelection = (rows) => {
    32. console.log(instance) //输出了这个vue组件的实例对象
    33. console.log(instance.refs.multipleTableRef) //输出了一个代理对象
    34. var ultipleTabInstance = toRefs(instance.refs.multipleTableRef)//将代理对象转换为了普通对象,不转会报错
    35. console.log(ultipleTabInstance); //输出了一个普通对象
    36. if (rows) {
    37. rows.forEach(row => {
    38. ultipleTabInstance.toggleRowSelection.value(row, undefined)
    39. console.log(row)
    40. });
    41. } else {
    42. ultipleTabInstance.clearSelection.value()
    43. }
    44. }
    45. //备用方案
    46. onMounted(() => {
    47. // console.log(multipleTableRef);
    48. })
    49. //该方法用于将表格数据赋给ref变量
    50. var handleSelectionChange = (val) => {
    51. multipleSelection.value = val;
    52. }
    53. //此处是实现删除逻辑的方法
    54. var delete_post = () => {
    55. data2.value = multipleSelection.value
    56. console.log(data2.value)
    57. data2.value.forEach(a => {
    58. console.log(a.id)
    59. list.unshift(a.id)
    60. })
    61. console.log(list)
    62. //将该id数组传到后端进行批量删除
    63. $.ajax({
    64. url: "http://127.0.0.1:4000/posts/add2",
    65. type: "POST",
    66. headers: {
    67. 'Content-Type': 'application/json;charset=utf-8',
    68. },
    69. data: JSON.stringify({ "content": list })
    70. , success(resp) {
    71. if (resp === "success") {
    72. console.log("caa")
    73. }
    74. }
    75. });
    76. }
    77. //到这里为止都是加上的
    78. var data = reactive({
    79. arr: [{
    80. id: 1,
    81. shopname: "沙县小吃",
    82. score: 5.5,
    83. sales: 1200,
    84. hh: 12,
    85. type: "快餐"
    86. },
    87. {
    88. id: 2,
    89. shopname: "法式牛排餐厅",
    90. score: 7.5,
    91. sales: 2400,
    92. hh: 12,
    93. type: "西餐"
    94. },
    95. {
    96. id: 3,
    97. shopname: "沙县大吃",
    98. score: 6.5,
    99. sales: 200,
    100. hh: 12,
    101. type: "快餐"
    102. },
    103. {
    104. id: 4,
    105. shopname: "南昌瓦罐汤",
    106. score: 6.9,
    107. sales: 2400,
    108. hh: 12,
    109. type: "快餐"
    110. },
    111. ]
    112. })
    113. return {
    114. data,
    115. multipleTableRef,
    116. toggleSelection,
    117. handleSelectionChange,
    118. delete_post,
    119. data2,
    120. }
    121. },
    122. }
    123. script>
    124. <style>style>

     

  • 相关阅读:
    阿里三面:MQ 消息丢失、重复、积压问题,如何解决?
    Win9x在Ryzen等新处理器虚拟机抽风的原因及补丁
    C++流插入和流提取的重载!
    Linux系统中驱动格式基本实现
    信贷风控NCL净损失率的指标实现与应用
    uniapp之uni-forms表单组件封装的双向数据绑定
    图像分割:LR-ASPP模型介绍
    Android优化RecyclerView图片展示:Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas,Kotlin(b)
    卷积神经网络之卷积层理解(持续更新)
    人工智能、深度学习、机器学习常见面试题281~300
  • 原文地址:https://blog.csdn.net/m0_62327332/article/details/132646182