多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] >[warning] 本项目`element ui`版本为`2.4.7` ## ele-table 使用懒加载 load 并设置默认展开项(expand-row-keys) > 问题描述:load 需要配置 tree-props,而 hasChildren 字段为 true 时才会有展开图标,但是如果配合 expand-row-keys 则发现下一个节点无展开图标了!!! ### 解决方案 ~~~ // 1 默认展开的项的 hasChildren 配置为 false ! // 2 配置默认展开项的下一层节点 <el-table lazy :data="tableData" :load="load" row-key="id" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" :expand-row-keys="expandRow" ></el-table> <script> export default { data() { return { expandRow: [], // 默认展开的项 tableData: [] } }, created () { this.tableData=[1,2,3,4,5,6,7].map((item, i) => { const id = i.toString() this.expandRow.push(id) return { id, children: [1,2,3,4,5,6,7,8,9].map((ele, i) => ({ id: id + '-' + i, children: [], hasChildren: true })), // 2 配置默认展开项的下一层节点 hasChildren: false // 1 默认展开的项的 hasChildren 配置为 false ! } }) } } </script> ~~~ ## ele-table 如何自定义表头 官方推荐的方案有两种 #### 1. 设置`Scoped slot`来自定义表头 ~~~ <el-table :data="tableData" // ... > <el-table-column <template slot="header" slot-scope="scope"> <el-input v-model="search" size="mini" placeholder="输入关键字搜索"/> </template> <template slot-scope="scope"> // ... </template> </el-table-column> </el-table> ~~~ 该方案在本项目中设置未生效 #### 2. 使用属性`render-header`方法 ~~~ <el-table-column // ... :render-header="renderHeader" > <template slot-scope="scope"> // ... </template> </el-table-column> ~~~ >[success] 和createElement(tag,{},String)类似这里第三个参数传递数组用于存放子元素 > 有关标签的属性设置放在`props`中,事件放在`on`中 ~~~ export default { // ... methods: { // 重新更改表头标题 renderHeader(h) { return [ h( 'el-dropdown', { props: { placement: 'bottom-start' }, on: { command: this.handleTimeSort } }, [ h('span', { class: { 'el-dropdown-link': true } }, [ h('span', { domProps: { innerHTML: '时间' } }), h('i', { class: { 'el-icon-arrow-down': true } }) ]), h('el-dropdown-menu', { slot: 'dropdown' }, [ h('el-dropdown-item', { class: { 'dropdown-active': this.active }, domProps: { innerHTML: '修改时间' }, props: { command: 'lastTime' } }), h('el-dropdown-item', { class: { 'dropdown-active': !this.active }, domProps: { innerHTML: '注册日期' }, props: { command: 'createTime' } }) ]) ] ) ] }, } } ~~~ 该方案成功解决, 如果你的项目能够支持`jsx`编译,那么这里使用`jsx`语法会更为便捷 ~~~ renderHeader() { return ( <el-dropdown placement="bottom-start" :command="handleTimeSort" // ... > <el-dropdown-menu slot="dropdown"> <el-dropdown-item command="lastTime" // ... > 修改日期 </el-dropdown-item> <el-dropdown-item command="createTime" // ... > 注册日期 </el-dropdown-item> </el-dropdown-menu> </el-dropdown> ) } ~~~