iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue+antDesign实现树形数据展示及勾选联动
  • 818
分享到

vue+antDesign实现树形数据展示及勾选联动

vue树形数据展示vue勾选联动 2023-02-05 15:02:23 818人浏览 安东尼
摘要

Vue使用antdesign实现树形结构表格展示,选中和取消事件不能实现父子级的联动。   解决:selectedRowKeys: selectedRowKey

Vue使用antdesign实现树形结构表格展示,选中和取消事件不能实现父子级的联动。 

 解决:selectedRowKeys: selectedRowKeys,onChange: onSelectChange, onSelect: onSelectRow, onSelectAll: onSelectAll

实现数据交互时定义方法

<a-table
        :rowKey='record => record.accountList && record.accountList.length ? record.id : record.id'
        :columns="columns"
        :data-source="marketingList"
        :row-selection="{selectedRowKeys: selectedRowKeys,onChange: onSelectChange, onSelect: onSelectRow, onSelectAll: onSelectAll}"
        childrenColumnName = "accountList">
</a-table>
 

注意:树形结构数据中,要有能区分级别的字段以便于区分父级还是子级,知道父子级的所属关系 

selectedRowKeys: [], // 选中的行的key值
      selectedRows: [], // 选中行的row
 
methods:{
     // 表格checkbox选中事件
    onSelectChange (selectedRowKeys, selectedRows) {
      console.log('selectedRowKeys changed: ', selectedRowKeys, selectedRows)
      this.selectedRowKeys = selectedRowKeys
      this.selectedRows = selectedRows
    },
    // 表格checkAll 操作
    onSelectAll (selected, selectedRows, changeRows) {
      let newArr = []
      console.info(selected, 'onSelectAll')
      // 将自定义字段 修改为对应状态
      if (selected) {
        // 递归添加自定义字段 checkBox: true (选中), false(未选中)
        this.traverseTree(this.marketingList, newArr, true)
      } else {
        this.traverseTree(this.marketingList, newArr, false)
      }
      this.marketingList = newArr
    },
    // 表格单行数据被选中事件
    onSelectRow: function (record, selected, selectedRows) {
      console.info(record, selected, selectedRows, 'selected')
      record.checkFlag = !record.checkFlag // 更改选中row的选中状态
      // antD此版本 注:暂不支持父子数据递归关联选择。选中第一级时需要手动添一级下的所有第二级
      // 选中父级&&父级有子元素
      if (record.type === 1 && record.accountList.length > 0) {
        // 修改子级的自定义checkFlag值
        record.accountList.forEach(item => {
          item.checkFlag = record.checkFlag
        })
        // 判断是选中还是取消选中
        if (record.checkFlag) { // 选中
          // 手动添加选中店第二级
          this.selectedRowKeys.push(record.id) // 一级id存入到选中的key集合中
          this.selectedRows.push(record) // 一级id存入到选中的row集合中
          // 遍历选中的一级的子级 子级全部存入到选中的key集合中、row集合中
          record.accountList.map(account => {
            this.selectedRowKeys.push(account.id)
            // 去重- 关键
            this.selectedRowKeys = this.selectedRowKeys.filter((x, index, self) => self.indexOf(x) === index)
          })
          this.selectedRows = this.selectedRows.concat(record.accountList)
          // 去重- 关键
          this.selectedRows = this.selectedRows.filter((x, index, self) => self.indexOf(x) === index)
        } else { // 取消选中
          // 取消本身
          this.selectedRowKeys = this.selectedRowKeys.filter(item => item !== record.id)
          this.selectedRows = this.selectedRows.filter(item => item.id !== record.id)
 
          // 手动取消一级下所有二级的选中状态
          record.accountList.forEach(account => {
            this.selectedRowKeys.forEach((selecTKEy, index) => {
              if (account.id === selectKey) {
                this.selectedRowKeys.splice(index, 1)
              }
            })
            this.selectedRows.forEach((selectRow, index) => {
              if (account.id === selectRow.id) {
                this.selectedRows.splice(index, 1)
              }
            })
          })
        }
      } else { // 操作子级checkbox
        // 找到子级所属父级
        let parent = ''
        this.marketingList.forEach(item => {
          if (item.id === record.childID) {
            parent = item
          }
        })
        if (record.checkFlag) { // 选中
          // 选中子级 如果子级全部被选中,对应父级被选中
          let checkArr = []
          checkArr = parent.accountList.filter(account => account.checkFlag)
          if (checkArr.length === parent.accountList.length) { // 子级全部被选中
            // 父级变更为被选中
            this.marketingList.forEach(item => {
              if (item.id === record.childID) {
                item.checkFlag = true
              }
            })
            this.selectedRowKeys.push(parent.id)
            this.selectedRows.push(parent)
          }
        } else {
          // 取消任意子级选中状态 父级取消被选中
          this.selectedRowKeys.forEach((selectKey, index) => {
            if (parent.id === selectKey) {
              this.selectedRowKeys.splice(index, 1)
            }
          })
          this.selectedRows.forEach((selectRow, index) => {
            if (parent.id === selectRow.id) {
              this.selectedRows.splice(index, 1)
            }
          })
         // 父级变更为取消选中
          this.marketingList.forEach(item => {
            if (item.id === record.childID) {
              item.checkFlag = false
            }
          })
        }
      }
    },
}

效果图:

到此这篇关于vue+antDesign实现树形数据展示及勾选联动的文章就介绍到这了,更多相关vue 树形数据展示及勾选联动内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue+antDesign实现树形数据展示及勾选联动

本文链接: https://www.lsjlt.com/news/194226.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue+antDesign实现树形数据展示及勾选联动
    vue使用antdesign实现树形结构表格展示,选中和取消事件不能实现父子级的联动。   解决:selectedRowKeys: selectedRowKey...
    99+
    2023-02-05
    vue 树形数据展示 vue 勾选联动
  • Vue联动Echarts实现数据大屏展示
    目录1.安装echarts.js2.新建vue界面3.引入 ECharts4.创建Vue方法和图表信息5.效果样式6.通过官网查找自己喜欢的样式7.组件重复使用1.组件重复使用定义2...
    99+
    2024-04-02
  • VUE 无限层级树形数据结构显示的实现
    目录组件递归调用使用render方法在做项目中,会遇到一些树形的数据结构,常用在左侧菜单导航,或者评论引用等地方,这种数据结构有个特点是不知道它会嵌套多少层,所以用template去...
    99+
    2024-04-02
  • VUE无限层级树形数据结构显示怎么实现
    这篇文章主要讲解了“VUE无限层级树形数据结构显示怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VUE无限层级树形数据结构显示怎么实现”吧!文章中用...
    99+
    2024-04-02
  • Vue动态构建混合数据Treeselect选择树及巨树问题的解决
    目录一、后台构建两个表的数据选择查询功能二、在VUE中引入Treeselect三、使用Treeselect组件四、构建初始的省级目录五、构建动态生成的二、三、四级目录六、最...
    99+
    2024-04-02
  • vue如何实现Json格式数据展示
    目录Json格式数据展示vue解析json数据Json格式数据展示 vue的jsonViewer组件也很好用,在网上看到有大神自己写的组件(递归调用),觉得很好,稍作修改,记录一下 ...
    99+
    2024-04-02
  • vue怎么实现Json格式数据展示
    本文小编为大家详细介绍“vue怎么实现Json格式数据展示”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么实现Json格式数据展示”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Json格式数据展示vue...
    99+
    2023-06-29
  • Vue组件库ElementUI实现表格加载树形数据教程
    ElementUI实现表格树形列表加载教程,供大家参考,具体内容如下 Element UI 是一套采用 Vue 2.0 作为基础框架实现的组件库,一套为开发者、设计师和产品经理准备的...
    99+
    2024-04-02
  • C# DataGridView中实现勾选存储数据和右键删除数据(示例代码)
    DataGridView事件CellContentClick 触发dataGridView的CellContentClick事件,并且在事件中调用Edit 方法。 实现DataGri...
    99+
    2024-04-02
  • Vue+echart 展示后端获取的数据实现
    最近在合作做一个前后端分离项目时,为了测试我写的后端部分获取数据的效果,自己也学了一下 vue 的知识,在获取 json 信息这里也踩了很多坑。 这里列举下我返回的 json 部分信...
    99+
    2023-01-18
    Vue echart 展示数据 Vue echarts后端数据
  • Vue动态数据实现 el-select 多级联动、数据回显方式
    目录动态数据 el-select 多级联动、数据回显多级联动select菜单(易懂)动态数据 el-select 多级联动、数据回显  父组件 <Pro...
    99+
    2024-04-02
  • Vue组件模板形式如何实现对象数组数据循环为树形结构
    这篇文章主要介绍Vue组件模板形式如何实现对象数组数据循环为树形结构,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据结构为数组中包含对象--树形结构,用Vue组件的写法实现以下的效...
    99+
    2024-04-02
  • Vue.js+HighCharts实现动态请求展示时序数据
    本文实例为大家分享了Vue.js+HighCharts实现动态请求展示时序数据的具体代码,供大家参考,具体内容如下 <template>   <el-contain...
    99+
    2024-04-02
  • Ajax如何实现下拉框联动显示数据
    小编给大家分享一下Ajax如何实现下拉框联动显示数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!页面中的两个下拉列表框:<...
    99+
    2024-04-02
  • Vue Echarts实现实时大屏动态数据显示
    目录前言一、vue配置二、适配方案三、Echarts四、实时更新前言 因为是国企线上应用的活动大屏,我就不附图了。代码仅供参考。 一、vue配置 1. 我是用vue-cli 搭建的,...
    99+
    2022-11-13
    Vue Echarts Vue Echarts动态数据 Vue Echarts大屏
  • 图解AVL树数据结构输入与输出及实现示例
    目录AVL树(平衡二叉树):AVL树的作用:AVL树的基本操作:AVL树的插入,单旋转的第一种情况---右旋:AVL树的插入,单旋转的第二种情况---左旋:AVL树的插入,双旋转的第...
    99+
    2024-04-02
  • Vue实现下拉滚动加载数据的示例
    目录第一步:安装第二步:引用第三步:使用Web项目经常会用到下拉滚动加载数据的功能,今天就来种草 Vue-infinite-loading 这个插件,讲解一下使用方法! 第一步:安装...
    99+
    2024-04-02
  • Vue模拟实现数据驱动的示例分析
    这篇文章主要为大家展示了“Vue模拟实现数据驱动的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue模拟实现数据驱动的示例分析”这篇文章吧。一、前言之...
    99+
    2024-04-02
  • vue如何实现input输入框关键字筛选检索列表数据展示功能
    小编给大家分享一下vue如何实现input输入框关键字筛选检索列表数据展示功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ht...
    99+
    2024-04-02
  • C/C++ Qt 数据库与ComBox实现多级联动示例代码
    Qt中的SQL数据库组件可以与ComBox组件形成多级联动效果,在日常开发中多级联动效果应用非常广泛,例如当我们选择指定用户时,我们让其在另一个ComBox组件中列举出该用户所维护的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作