element-table-过滤及修改过滤icon

本文探讨了前端页面如何实现设备状态过滤,分析了是否需要将过滤操作转化为调用接口的方式。通过`filterHandler`函数展示了前端过滤的实现,而`filterChange`则用于在用户点击筛选按钮后更新搜索参数并刷新列表。此外,还涵盖了自定义过滤图标、清除过滤器的功能,并提供了相关样式调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

/**
 * 设备状态过滤
 * 目前是前端页面过滤,是否要做成调用接口的过滤??
 */
// 过滤筛选:不调用接口
filterHandler (value, row, column) {
  console.log('value:', value, 'row:', row, 'column:', column)
  /* this.searchParams.fieldStatus = value
   this.search(true)
   return false*/
  const property = column['property']
  return row[property] === value
},

// 过滤筛选:调用接口
filterChange (filters) {
  console.log('filters:', filters)
  /***
   * 如果不自定义custom-status这个key,那么就是element自动生成的!
   * {
   *   custom-status: (2) ['online', 'offline', __ob__: Observer]
   * }
   */
  this.searchParams.fieldStatus = filters['custom-status']
  this.search(true)
},
},

  • filter-mutiple:单选;默认是多选
  • filter-method:前端过滤,每一行都执行
  • filter-change:点击‘筛选’按钮后执行的,里面可以做接口调用,刷新列表

更换过滤icon

::v-deep .el-icon-arrow-down {
  vertical-align: middle;
}

 /*把icon的content更换了*/ 
::v-deep .el-icon-arrow-down:before {
  content: "\e6ca";
  font-size: 18px;
}

::v-deep .el-table__column-filter-trigger i {
  color: #323233;
}

::v-deep .el-table__column-filter-trigger {
  line-height: 23px;
}
  <el-button @click="resetDateFilter">清除日期过滤器</el-button>
  <el-button @click="clearFilter">清除所有过滤器</el-button>

// 手动清除过滤:
      resetDateFilter() {
        this.$refs.filterTable.clearFilter('date');
      },
      clearFilter() {
        this.$refs.filterTable.clearFilter();
      },
<think>好的,用户的问题是关于在el-table中处理展开行点击事件时的事件冒泡问题。我需要先理解用户的具体需求和问题场景。 首先,用户提到使用element-ui的el-table组件,当点击展开行时,事件冒泡导致父行或者其他元素的事件被触发。例如,点击展开行的某个按钮,可能同时触发了行的点击事件,比如row-click。用户希望阻止这种冒泡行为。 接下来,我需要回忆element-ui中el-table的相关文档和常见问题。根据引用[2]中的信息,expand-change事件和row-click事件可能会同时触发,尤其是在点击展开图标时。而用户可能是在展开行内部有自定义的点击事件,需要阻止冒泡到父级行。 然后,解决方案可能涉及在展开行的内部元素上使用Vue.stop事件修饰符,或者在处理事件时手动调用event.stopPropagation()。例如,在展开行的按钮点击事件中添加.stop来阻止事件冒泡。 另外,还需要考虑使用expand-change事件和expand-row-keys来控制展开行的状态,确保点击展开行时不会触发其他事件。引用[2]中提到设置expand-row-keys来控制展开行的收缩,这可能与事件处理有关联。 还需要检查是否因为同时使用了fixed列(引用[3])导致样式或事件处理的问题,但用户的问题主要集中在事件冒泡,所以可能主要是事件处理的问题。 可能的步骤包括: 1. 在展开行的自定义内容中的事件处理使用.stop修饰符。 2. 在expand-change事件处理中管理展开状态,避免不必要的触发。 3. 检查row-click事件的处理逻辑,确保只在需要时执行。 需要验证这些方法是否有效,并确保不会影响其他功能,比如fixed列的显示问题。同时,提供示例代码帮助用户理解如何实现阻止冒泡。</think>在`el-table`中阻止展开行点击事件冒泡,可以通过以下方法实现: ### 方法一:使用事件修饰符 在展开行内部的点击事件中添加`.stop`修饰符,阻止事件向上传播: ```html <el-table :data="tableData" @expand-change="handleExpandChange"> <el-table-column type="expand"> <template #default="{row}"> <div @click.stop="handleInnerClick(row)"> <!-- 关键stop修饰符 --> 展开内容(点击不会触发行点击事件) </div> </template> </el-table-column> </el-table> ``` ### 方法二:手动阻止事件冒泡 在事件处理函数中调用`event.stopPropagation()`: ```javascript handleInnerClick(row, event) { event.stopPropagation(); // 业务逻辑 } ``` ### 方法三:分离事件触发源 通过判断事件触发目标来过滤冒泡: ```javascript handleRowClick(row, column, event) { if (event.target.className.includes('el-table__expand-icon')) { return; // 如果是展开图标触发的点击则不处理 } // 主行点击逻辑 } ``` ### 补充说明 1. **expand-change事件**需要与`expand-row-keys`配合使用,通过控制`expand-row-keys`数组实现单行展开逻辑[^2] 2. **fixed列冲突**问题可通过设置展开内容的`min-width: 100%`解决布局错位[^3] ```javascript // 单行展开控制示例 data() { return { expandRowKeys: [] } }, methods: { handleExpandChange(row) { this.expandRowKeys = row.expand ? [] : [row.id] } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值