elment-ui table组件 -- 远程筛选排序

elment-ui table组件 -- 远程筛选排序

基于 elment-ui table组件 开发,主要请求后台实现筛选 排序的功能。

需求

  • 排序 筛选 是对后台整个数据进行操作,而不是对当前页面的数据进行操作
  • 若是其关联的下一级页面,(eg:点击查看编辑时,再返回当前页面时,保留之前筛选,或排序条件),否则清空

先上一份源码, 直接使用官网的(修改了一小部分参数,可以忽略)

<el-table
  :data="tableData"
  style="width: 100%"
>
  <el-table-column
    prop="date"
    label="日期"
    sortable="custom"
    min-width="180"
    :filters="dateList"
  >
  </el-table-column>
  <el-table-column
    sortable="custom"
    prop="name"
    label="姓名"
    min-width="180"
  >
  </el-table-column>
  <el-table-column
    prop="address"
    label="地址"
    min-width="200"
  >
  </el-table-column>
  <el-table-column
    prop="tag"
    label="标签"
    min-width="100"
    :filters="flagList"
  >
    <template slot-scope="scope">
      <el-tag
        :type="scope.row.tag === ‘家‘ ? ‘primary‘ : ‘success‘"
        disable-transitions
      >{{scope.row.tag}}</el-tag>
    </template>
  </el-table-column>
</el-table>

知识点

  • 筛选

    • 表头 (el-table

      • filter-change
      <el-table
        :data="tableData"
        style="width: 100%"
        @filter-change="handleFilter"
      >
    • 表格(el-table-column
      • 针对需要排序的列添加 :filters="Array[Object]" ,此处注意 Object 的格式必须为 {text: **, value: **} 键必须如此,暂时没有找到可以修改的api

        <el-table-column
          prop="date"
          label="日期"
          sortable="custom"
          min-width="180"
          :filters="dateList"
        >
        </el-table-column>
    • 设置默认值
      • filtered-value (作用在 el-table-column
      <el-table-column
        prop="tag"
        label="标签"
        min-width="100"
        :filters="flagList"
        :filtered-value="[‘公司‘]"
      >

      显示效果如下

  • 排序

    • 表头 (el-table)

      • sort-change
      <el-table
        :data="tableData"
        style="width: 100%"
        @filter-change="handleFilter"
        @sort-change="handleSort"
      >
  • tbody (el-table-column)
    • sortable 设置为 :sortable="‘custom‘"
    <el-table-column
      prop="date"
      label="日期"
      :sortable="‘custom‘"
      min-width="180"
      :filters="dateList"
    >
  • 设置默认值
    • default-sort 参数 { order: **, prop: **}, `prop指那一列,order 指升序还是倒序

显示效果如下

至此,初步需求完成,现在就是具体细化了

细化

  • 将未知的值都存入 vuex 中,便于全局控制

    • default-sort, filtered-value, filters

    default-sort, filtered-value 不能写死,因为是动态的请求参数,因而得注意了

    // component
    computed: mapState(‘elTable‘, [
      ‘flagList‘,
      ‘dateList‘,
      ‘filters‘,
      ‘sort‘
    ])
    // vuex
    filters: [],
    sort: {
      order: ‘‘,
      prop: ‘‘
    }
  • 方法,进行调用修改
    • 筛选过程中,无法很好定位到具体哪一列, 给当前列添加 column-key
    // vuex
    filtersDate: [],
    filtersTag: [],
    sort: {
      order: ‘‘,
      prop: ‘‘
    }
    },
    mutations: {
      setFilters_date (state, data = []) {
        state.filtersDate = data
      },
      setFilters_tag (state, data = []) {
        state.filtersTag = data
      },
      setSort (state, data = {}) {
        state.sort = data
      }
    }
    // component
    methods: {
      ...mapMutations(‘elTable‘, [
        ‘setFilters_date‘,
        ‘setSort‘,
        ‘setFilters_tag‘
      ]),
    
       handleFilter (filter) {
         // 拿到 key
         /**
          * 命名技巧罢了,只是关联
          */
        const key = Object.keys(filter)[0]
        this[‘setFilters_‘ + key](filter[key])
       },
       handleSort (column, prop, order) {
         console.log(column, prop, order)
       }
    },
    computed: mapState(‘elTable‘, [
      ‘flagList‘,
      ‘dateList‘,
      ‘filtersDate‘,
      ‘filtersFlag‘,
      ‘sort‘
    ])

    上面主要是如何将几者之间进行关联罢了

清除

即要清除当前页面的数据,同时还要清除 vuex 里存的数据

  • clearFilter, clearSort
// vuex
clear (state) {
  state.filtersDate = []
  state.filtersTag = []
  state.sort = {
    order: ‘‘,
    prop: ‘‘
  }
}
// component
clearAll () {
 this.$refs.tb.clearFilter()
 this.$refs.tb.clearSort()
 this.clear()
}

  • 是否是关联的页面

    created () { // 此处做判断,是否是其关联的页面,不是清除,是就不清除 if (!isPage) return this.clearAll() }

总结

  • 可能还有些不完善,但是已经可以实现上述需求了
  • 有个问题, 筛选时,不点击筛选或重置,是无法在vuex中缓存,其实也很合理,vuex里存请求的数据,没点击也就没必要存储了

原文地址:https://www.cnblogs.com/sinosaurus/p/10420509.html

时间: 2024-10-10 17:40:10

elment-ui table组件 -- 远程筛选排序的相关文章

ivew | element ui- 关于table组件自定义sortMethod排序不生效或错误问题处理

最近项目需求需要,需要对表格列进行自定义排序,用的是iview的组件,看了文档,table 排序这部分,但是没有给出相关例子.以为不难搞的,是不难搞,就是折腾了好一会... Iview table 排序 data () { return { columns5: [ { title: 'Date', key: 'date', sortable: true, }, { title: 'Name', key: 'name' }, { title: 'Age', key: 'age', sortable

element ui table组件自定义合计栏,后台给的数据

合计的数据是后台传的,所以用table组件自定义一行用来合计 <el-table border fit v-loading.body="listLoading" element-loading-text="拼命加载中" :data="getChannelData" style="width: 100%" :default-sort = "{prop: 'date', order: 'descending'}&q

vue+element ui table组件封装,使用render渲染

后台管理经常会用到表格,一开始封装了一个常用的功能性表格,点击这里: 后来由于需求增加,在表格中还会用到switch,select,input等多种组件,每次都要在html中增加<el-table-column></el-table-column>, 维护起来相当麻烦,就想到了使用render渲染. 组件内部封装代码: <template> <el-table :data="tableData" size="medium"

Element ui 中使用table组件实现分页记忆选中

我们再用vue和element-ui,或者其他的表格的时候,可能需要能记忆翻页勾选,那么实现以下几个方法就ok了 首先定义个data值 data () { return { multipleSelectionAll: [], // 所有选中的数据包含跨页数据 idKey: 'personId' // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下) } } 方法中定义以下: methods : { // 设置选中的方法 setSelectRow() { if (!this.multi

React中使用Ant Table组件

一.Ant Design of React http://ant.design/docs/react/introduce 二.建立webpack工程 webpack+react demo下载 项目的启动,参考 三.简单配置 1.工程下载下来之后,在src目录下新建目录“table”,新建app.js,内容如下. import React from 'react'; import ReactDOM from 'react-dom'; import ExampleTable from './Exam

Ant Table组件

http://www.cnblogs.com/hujunzheng/p/5689650.html React中使用Ant Table组件 v一.Ant Design of React http://ant.design/docs/react/introduce v二.建立webpack工程 webpack+react demo下载 项目的启动,参考 v三.简单配置 1.工程下载下来之后,在src目录下新建目录“table”,新建app.js,内容如下. import React from 're

7个jquery easy ui 基本组件图解

以下给出7个jquery easy ui 基本组件: 1 基本面板 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Basic Panel - jQuery EasyUI Demo</title> <link rel="stylesheet" type="text/css" href=".

使用 antd Table组件, 异步获取数据

使用React.js + Redux + antd 制作CMS 后台内容管理系统,分享一点点积累,欢迎讨论. 在this.state中初始化数据: this.state = { pageNum:1, /*翻页查询*/ pageSize:10, /*分页查询*/ activePage: 1, /*默认显示一页*/ selectedRowKeys: [], // 这里配置默认勾选列 loading: false, /*antd*/ selectedRow:[] } 在制作过程中,根据需要把antd的

Excel碰到空行无法筛选排序解决方法

Excel碰到空行无法筛选排序解决方法 有时候excel可真心考人智商,一列中有空行,那么你就只能筛选排序首个空行前的内容了,解决方法来了,做个小记录,以防今后忘了. 1.在首列插入一列: 2.全选该列输入1,使用快捷键"Ctrl+回车键"填充整列: 3.选择首行,点击"数据-->筛选-->自动筛选",现在可以全部筛选及排序了 Excel碰到空行无法筛选排序解决方法,布布扣,bubuko.com