el-table树型数据lazy加载实现首行展开

el-table树型数据lazy加载实现首行展开

遇到一个小需求,一个树型数据的el-table,并且使用lazy加载,需要实现首行展开。

实现

思路:使用 expand-row-keys 或者 toggleRowExpansion API展开,但是发现这些API并不会触发 load 函数。
解:开始自动获取第一行数据的子数据,并设置进第一行数据的 children 里,再使用 toggleRowExpansion API展开第一行。

新问题:点击折叠会再次触发 load 函数
解:展开过一次的行,后面再折叠与展开不会再触发 load,说明触发 load 是有触发机制的,借助了一下混元,找到了这个控制变量 tableRef.value.store.states.treeData.value[].loaded,尝试改了它 loaded: true

tableRef.value.store.states.lazyTreeNodeMap.value[firstRow.yourRowKey
### 使用方法 #### 1. 引入组件 在 Vue 项目中,需要引入 `el-select` 和 `el-tree` 组件。可以使用全局引入或局部引入的方式。 #### 2. 编写模板代码 在 `template` 部分,将 `el-tree` 嵌套在 `el-select` 组件的 `el-option` 中。示例代码如下: ```vue <template> <div> <el-select ref="selectTree" v-model="treeData" placeholder="请选择..." > <el-option :value="categoryId" style="height: auto"> <el-tree ref="tree" :data="categoryOptions" default-expand-all node-key="categoryId" empty-text="无匹配数据" :props="defaultProps" highlight-current @node-click="handleNodeClick" /> </el-option> </el-select> </div> </template> ``` #### 3. 编写数据部分 在 `data` 中定义所需的数据,如数据、默认配置等。示例代码如下: ```javascript data() { return { categoryId: null, categoryOptions: [], treeData: "", data: [ { id: 1, name: "一级 1", children: [ { id: 4, name: "一级 1-1", }, ], }, ], defaultProps: { value: 'categoryId', label: 'categoryName', children: "children", disabled: function(data, node) { if (data.isLeaf === 1) { return false; } else { return true; } }, }, }; } ``` #### 4. 编写事件处理函数 在 `methods` 中编写 `node-click` 事件的处理函数,用于处理节点点击事件。示例代码如下: ```javascript methods: { handleNodeClick(data, node, component) { // 处理节点点击逻辑 this.treeData = data.categoryId; }, } ``` ### 注意事项 - **数据格式**:`el-tree` 的 `data` 属性需要传入正确的数据结构,每个节点需要有唯一的 `node-key` 标识。 - **事件绑定**:确保 `node-click` 事件正确绑定到 `el-tree` 组件上,并且在事件处理函数中正确处理选中逻辑。 - **样式问题**:检查是否存在样式冲突或覆盖,导致点击区域异常。可以通过浏览器开发者工具检查元素样式,确保点击区域正常。 - **选中逻辑**:需要手动设置 `el-select` 的选中值,确保选中状态正确显示。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值