【问题标题】:Sort Bootstrap-Vue table (mon, tue, wed instead of alphabetical)对 Bootstrap-Vue 表进行排序(星期一、星期二、星期三,而不是按字母顺序)
【发布时间】:2019-07-03 17:42:30
【问题描述】:

我有一个使用 Bootstrap-vue 从数据库中提取信息的表。数据库有一个名为“day”的字段,它存储“mon”、“tue”、“wed”等字符串值。我希望能够按天按此列对表进行排序,而不是按字母顺序。有没有办法做到这一点?

我对 Vue 和 Bootstrap Vue 还是很陌生。我已经设置了表格,它可以很好地从数据库中提取信息。它将每个存储为一个对象,并根据定义的字段显示它。

可视化问题的简化代码:

HTML:

<div id='root'>
   <b-container fluid>
      <h1>Welcome</h1>
      <br/>
      <b-table
         show-empty
         stacked="md"
         :items="tableItems"
         :fields="fields"
         sort-by="day"
      >
      </b-table>
   </b-container>
</div>

Vue:

new Vue({
el: '#root',
data() {
   return {
      tableItems: [
         {name: 'Mark', age: '23', day:'wed'},
         {name: 'John', age: '21', day:'thu'},
         {name: 'Stephen', age: '24', day:'tue'},
         {name: 'Will', age: '31', day:'fri'},
         {name: 'Andrew', age: '27', day:'wed'},
         {name: 'James', age: '24', day:'mon'},
         {name: 'Shawn', age: '29', day:'tue'},
      ],
      fields: [
         { key: 'name', label: 'Name', sortable: true},
         { key: 'age', label: 'Age', sortable: true, class: 'text-center' },
         { key: 'day', label: 'Day', sortable: true},
      ],
      }
   }
});

目前,此代码将在日期列中按字母顺序排序。我希望它按“日期”排序,例如“周一”、“周二”、“周三”等

【问题讨论】:

    标签: javascript vue.js bootstrap-vue


    【解决方案1】:

    您可以通过挂钩到:sort-compare 例程来使用自己的自定义排序方法。

      <b-table
         show-empty
         stacked="md"
         :items="tableItems"
         :fields="fields"
         :sort-compare="sortingChanged"
      >
    

    然后定义一个字典来给出你的天数。

    const days = {
      "sun": 0,
      "mon": 1,
      "tue": 2,
      "wed": 3,
      "thu": 4,
      "fri": 5,
      "sat": 6,
    };
    

    最后处理排序。

      methods: {
        sortingChanged(a, b, key) {
          let result = 0;
          if (key === 'day') {
              let day1 = a[key].toLowerCase();
              let day2 = b[key].toLowerCase();
              return days[day1] - days[day2];
          } 
          return false;
        }
      }
    

    Math.min/max 的内容是将 sort-compare 例程正常工作所需的值限制在 -1 和 1 之间。

    这是working codesandbox example。您可以在docs 中阅读有关sort-compare 例程的更多信息。

    感谢@TroyMorehouse 指出更好的方法。

    【讨论】:

    • 如果您使用自定义排序比较例程,您可以让它只处理特定字段的排序。如果您希望 b-table 的内部排序来处理某些字段,只需从 sort-compare 例程中返回 falsenull,它将回退到该字段键的内部排序例程。
    • @TroyMorehouse 这是我以前从未见过的更好的方法。我更新了我的答案以显示这种方法。
    • @Steven B 请注意,您不应该使用sortDesc 来控制负/正排序(b-table 在内部为您执行此操作)。 sortDesc 仅在您需要将空值(或空值)排序到列表顶部或底部时才存在)因此删除 if (sortDesc) { ... } 部分。我已编辑您的答案以删除 if 声明
    • 另外,也不需要将返回值限制在-1+1之间,但也无妨。
    • @TroyMorehouse 似乎您应该回答这个问题,哈哈。我接受了修改。
    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2015-06-20
    • 2019-06-23
    • 2016-05-31
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多