【问题标题】:How can I sort a v-data-table by default?默认情况下如何对 v-data-table 进行排序?
【发布时间】:2020-06-19 16:04:44
【问题描述】:

我似乎无法让默认排序工作。对于documentation 中的参数custom-sort,我所能看到的只是它是“用于对项目进行排序的函数”,但我不知道以何种方式。我可以想象很多。是否需要进行初始排序?它似乎返回了一个项目列表,但是当我尝试创建一个时,我收到一条错误消息 this.customSort is not a function

<template>
  <v-data-table
    :headers="headers"
    :items="reports"
    hide-default-footer>
    <template v-slot:item.requested="{ item }">
      {{ datetimeToDistance(item.requested) }}
    </template>
  </v-data-table>
</template>
<script>
export default {
name: 'Reports',
data () {
    return {
        customSort: (items,index,isDesc) => console.log("never called"),
        reports: [{name:"a",requested:"2020-01-01T00:00:00Z"}.{name:"b",requested:"2020-02-02T00:00:00"}],
    }
},
computed: {
    headers () {
        return [
            {text: "Name", value: "name"},
            {text: "Report Type", value: "report_type"},
            {text: "Requested", value: "requested", sort: (a,b) => a.localeCompare(b) },
            ];
    },
}
}
</script>

如果您单击链接,我的排序工作。我在这里真正想说的是:“当页面第一次加载时,按'请求'排序,就好像用户最初点击了那个页面一样。然后让他们更改顺序。”

注意:datetimeToDistance 只是一个调用库的函数,并不太重要。只是该列的输出并不直接在对象中。

【问题讨论】:

    标签: vue.js vuejs2 vuetify.js


    【解决方案1】:

    sort-bysort-desc 属性与.sync 选项一起使用,并在数据中设置所需的值。

    <template>
      <div>
        <v-data-table
          :sort-by.sync="sortBy"
          :sort-desc.sync="sortDesc"
        ></v-data-table>
      </div>
    </template>
    
    <script>
      export default {
        data () {
          return {
            sortBy: 'fat',
            sortDesc: false,
        },
      }
    </script>
    

    https://vuetifyjs.com/en/components/data-tables/#external-sorting

    【讨论】:

      【解决方案2】:

      我通常在分页指令中对 v-datatable 排序如下:

      <template>
          <v-data-table :headers="headers" :items="reports" :pagination.sync="pagination" hide-default-footer>
              <template v-slot:item.requested="{ item }">
                  {{ datetimeToDistance(item.requested) }}
              </template>
          </v-data-table>
      </template>
      <script>
          export default {
              name: 'Reports',
              data() {
                  return {
                      customSort: (items, index, isDesc) => console.log("never called"),
                      reports: [{ name: "a", requested: "2020-01-01T00:00:00Z" }.{ name: "b", requested: "2020-02-02T00:00:00" }],
                      pagination: { sortBy: 'requested', descending: true, rowsPerPage: 10 }
                  }
              },
              computed: {
                  headers() {
                      return [
                          { text: "Name", value: "name" },
                          { text: "Report Type", value: "report_type" },
                          { text: "Requested", value: "requested", sort: (a, b) => a.localeCompare(b) },
                      ];
                  },
              }
          }
      </script>
      

      【讨论】:

      • 这实际上并不能回答问题。
      • 是的,抱歉,但这并不能真正回答我的问题,是吗?我没有分页。我是不是误会了什么?
      • pagination 是也包含排序信息的对象的名称。这是一个有效的解决方案。
      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 2022-01-14
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2021-02-15
      • 1970-01-01
      相关资源
      最近更新 更多