vue2 element 和 vue3 antd 树el-tree a-tree懒加载

实现效果:点击按钮,弹框显示第一层数据,点击下拉,调接口展示第二层数据。

vue2 <el-tree> 主要代码:

<el-tree
  ref="tree"
  node-key="id"
  highlight-current
  :props="capProps"
  :load="loadNode"
  lazy
  show-checkbox
  @check="check"
/>
data() {
  return {
    capProps: {
      children: 'children',
      label: 'label',
      isLeaf: 'isLeaf'
    },
loadNode(node, resolve) {
  if (node.level === 0) {
    this.API().then(res => {
      this.capOptions = res.data.body.list
      this.capOptions.map(item => {
        item.label = item.deviceTypeAlias
        item.children = []
        // item.disabled = true 第一层全选框不可用
        item.isLeaf = false
      })
      return resolve(this.capOptions)
    })
  }
  if (node.level === 1) {
    this.API(node.data.id).then(res => {
      if (res.data.success) {
        this.childDatas = res.data.body.list
        this.childDatas.map(item => {
          item.label = item.deviceAlias
          item.isLeaf = true
        })
      }
      node.loading = false
      return resolve(this.childDatas)
    })
  }
},

----------------------------------------------------------------------------------------------------------------------------

vue3 <a-tree> 主要代码:

<a-tree
  v-model:expandedKeys="expandedKeys"
  v-model:selectedKeys="selectedKeys"
  node-key="id"
  :load-data="onLoadData"
  :tree-data="treeData"
  checkable
  @check="check"
/>
const expandedKeys = ref([])
const selectedKeys = ref([])
const treeData = ref([])
const childData = ref([])
onMounted(() => {
  getTreeList()
})
function getTreeList() {
  store.dispatch('api', '').then(res => {
    const treeDatas = res.data.body.list
    treeDatas.map(item => {
      item.title = item.deviceTypeAlias
      item.key = item.id
      item.isLeaf = false
      item.children = childData.value
    })
    treeData.value = [...treeDatas]
  }).catch(() => {
  })
}
const onLoadData = treeNode => {
  return new Promise(resolve => {
    if (!treeNode) {
      resolve()
      return
    }
    store.dispatch('API', treeNode.dataRef.key).then(res => {
      const data = res.data.body.list
      childData.value = data.map(item => {
        item.title = item.deviceAlias
        item.key = item.id
        item.isLeaf = true
        return data
      })
      treeNode.dataRef.children = data
      treeData.value = [...treeData.value]
      resolve()
    })
  })
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 Vue3 的 el-tree 组件进行前端过滤和懒加载。下面是一些示例代码,帮助你实现这些功能: 1. 前端过滤: ```html <template> <el-tree :data="treeData" :filter-node-method="filterNode" ></el-tree> </template> <script> export default { data() { return { treeData: [ // 的数据 ], filterText: '' // 过滤关键字 }; }, methods: { filterNode(value, data) { if (!value) return true; return data.label.includes(value); } } }; </script> ``` 在上面的代码中,我们在 el-tree 组件上绑定了 `filter-node-method` 属性,它指向一个方法 `filterNode`。在 `filterNode` 方法中,我们判断节点的标签是否包含过滤关键字,如果包含则返回 `true`,否则返回 `false`,从而实现前端过滤的功能。 2. 懒加载: ```html <template> <el-tree :data="treeData" :lazy="true" :load="loadNode" ></el-tree> </template> <script> export default { data() { return { treeData: [] }; }, methods: { loadNode(node, resolve) { if (node.level === 0) { // 根节点 // 加载根节点数据 } else { // 子节点 // 加载子节点数据 } } } }; </script> ``` 在上面的代码中,我们在 el-tree 组件上设置了 `lazy` 属性为 `true`,并且绑定了 `load` 方法。在 `loadNode` 方法中,我们根据节点的层级来加载数据,可以根据需要进行异步请求或其他操作来加载节点的子节点数据。 希望以上代码对你有所帮助!如果有任何问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值