vue js 2 对表格进行排序

2024-03-18

我有两个关于 vue.js 2 的问题和一个小提琴:https://jsfiddle.net/tmun9cxa/1/ https://jsfiddle.net/tmun9cxa/1/

  1. 当您单击列标题时,为什么我的排序不起作用?解决办法是什么?

  2. 如何让搜索输入字段仅搜索 pn 列?

我发现的很多例子都使用 vue1 并且已经过时了。

<input type="text" value="" v-model="search" placeholder="Search">

<table style="text-align: center;">
    <thead>
        <tr>
            <th v-for="column in columns">
                <a 
                    href="#"
                    v-on:click="sort(column.shortcode)">{{column.label}}
                </a>
            </th>
        </tr>
    </thead>
    <tbody>
        <tr v-for="(product) in products">
            <td>{{product.pn}}</td>
            <td>{{product.od}}</td>
            <td>{{product.id}}</td>
            <td>{{product.thickness}}</td>
            <td>{{product.lo}}</td>
            <td>{{product.weight}}</td>
        </tr>
    </tbody>
</table>

这里是 JavaScript

var vm = new Vue({
        el: '#app',
        data: {
            currentSort: 'pn',
            currentSortDir: 'asc',
            search: '',
            columns: [
                { label: 'P/N', shortcode: 'pn' },
                { label: 'OD (De,mm)', shortcode: 'od' },
                { label: 'ID (De,mm)', shortcode: 'id' },
                { label: 'Thickness (De,mm)', shortcode: 'thickness' },
                { label: 'LO', shortcode: 'lo' },
                { label: 'Weight (kg/1000)', shortcode: 'weight' },
            ], // columns
            products: [
                { 
                    pn: 170158,
                    od: 13,
                    id: .44,
                    thickness: 1,
                    lo: .45,
                    weight: .7
                },{ 
                    pn: 1803561,
                    od: 12,
                    id: .8,
                    thickness: .7,
                    lo: .11,
                    weight: .5
                },{ 
                    pn: 170149,
                    od: 9,
                    id: .64,
                    thickness: .6,
                    lo: .75,
                    weight: .3
                },{ 
                    pn: 150149,
                    od: 15,
                    id: .22,
                    thickness: .3,
                    lo: .55,
                    weight: .9
                },
            ], // products
        },
        methods: {
            sort:function(col) {
                //console.log( 'current: '+this.currentSort );
                //console.log( 'col: '+col );
                //var colthing = col;

                // if you click the same label twice
                if(this.currentSort == col){
                    console.log( 'same col: '+col );
                    // sort by asc
                    this.products = this.products.sort((a, b) => {
                        return a.col >= b.col;
                    });
                }else{
                    this.currentSort = col;
                    console.log( 'diff col: '+col );
                    // sort by desc
                    this.products = this.products.sort((a, b) => {
                        return a.col <= b.col;
                    });
                } // end if

            }, // sort

        }, // methods
    }); // vue

正如所指出的,列排序不起作用,因为您需要使用a[col]代替a.col

此外,您应该考虑使用计算值而不是修改原始数据。这也使得过滤变得更容易。

这是更新后的脚本(请注意<tr v-for="(product) in products">需要是<tr v-for="(product) in showProducts">为了这个工作)

var vm = new Vue({
  el: '#app',
  data: {
    currentSort: 'pn',
    currentSortDir: 'asc',
    search: '',
    columns: [
      { label: 'P/N', shortcode: 'pn' },
      /// more columns ...
    ], // columns
    products: [
      //.... objects
    ], // products
  },
  computed: {
    showProducts() {
      return this.products.filter(a => {
        console.log(a.pn)
        return (a.pn + '').includes(this.search)
      })
        .sort((a, b) => {
        if (this.currentSortDir === 'asc') {
	        return a[this.currentSort] >= b[this.currentSort];      
        }
        return a[this.currentSort] <= b[this.currentSort];
      })
    },
  },
  methods: {
    sort:function(col) {
      // if you click the same label twice
      if(this.currentSort == col){
        this.currentSortDir = this.currentSortDir === 'asc' ? 'desc' : 'asc';
      }else{
        this.currentSort = col;
        console.log( 'diff col: '+col );
      } // end if

    }, // sort

  }, // methods
}); // vue

最后,小提琴:https://jsfiddle.net/tmun9cxa/2/ https://jsfiddle.net/tmun9cxa/2/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue js 2 对表格进行排序 的相关文章

随机推荐

  • 将文件从 Node js 传输到 dropbox,无需基于浏览器的 oauth 身份验证

    我正在运行一个来自heroku的基于nodejs express的api服务器并使用dropbox js https github com dropbox dropbox js图书馆 这是我想做的 用户点击特定的 API 端点并启动该流程
  • 如何在 C#(Windows Phone 7)中解析 JSON 数组值?

    我在 WP7 工作 我需要解析列表框中的 JSON 数组值 有人说 使用序列化器和反序列化器 但我不知道如何使用序列化器和反序列化器将这些值解析到组合框或列表框中 我建议使用JSON NET http json codeplex com 我
  • 列出来自 DBpedia 的国家

    尝试查询 DBpedia 以获取包含以下内容的所有国家 地区的列表dbo longName列出每个国家的财产和首都 但返回 0 个结果 看不出查询有什么问题 PREFIX dbo
  • 重音字符不显示

    我有一个要求 将电子邮件发送给用户 他可以直接回复该电子邮件 并且该电子邮件的内容将发布在他的帐户中 问题是当用户从电子邮件中发布内容时 重音字符无法正确显示 我使用发送电子邮件MailMessage class message BodyE
  • MX记录查找和检查

    我需要创建一个工具来检查域的实时 mx 记录是否符合预期 我们的一些员工在摆弄这些记录时遇到了问题 导致所有传入的邮件都被重定向到空白 现在我不会撒谎 我根本不是一个称职的程序员 我已经阅读了大约 40 页的 深入 Python 可以阅读和
  • 如何终止 java 上的远程 Eclipse 调试

    我正在远程调试一个java应用程序 它通常运行良好 然而 我正在编写新的代码 现在我到达一行 我想终止程序 但唯一可用的按钮是暂停和断开连接 当然 挂起不会终止 断开连接会停止调试 但会使远程应用程序处于任何状态 然后我必须重新启动它 有一
  • 将宽度和高度设置为 React-native 模式

    我无法使用配置模态高度和宽度style财产 还有其他方法可以设置模态高度和宽度吗
  • 如何在 ASP.NET MVC 3 中发布文件数组?

    我希望能够以一种形式发布多个文件 我想将这些文件作为文件数组传递 例如我想这样做
  • 查找与某个模式匹配的所有文件名

    我正在尝试找到一种方法来列出与此模式匹配的文件夹中的所有文件名 20131106XXXXX pdf 前缀是日期 内容和长度XXXX不同文件有所不同 我只关心 pdf 文件 任何人都可以建议一种方法来做到这一点吗 Try this list
  • 厨师兼顾客中途死亡

    最近 我们开始遇到厨师客户在跑步过程中死亡的问题 因为我们在通常进行得更快的跑步列表的各个部分上花费了更多的时间 我使用的是家庭 Wi Fi 而我的同事使用的是工作 Wi Fi 该 Wi Fi 本身也存在一些连接问题 如果在 Chef cl
  • Django Rest Framework - 序列化器中的字段级验证

    我有一个序列化器 我正在尝试添加字段级验证 我需要验证序列化的某些字符字段是否为空 以及布尔字段是 true 还是 false 我有这个序列化器 但即使 Ficha publicada 为 false 我也不会返回错误 class Publ
  • 取消注册已注册的 filewatcher 事件不起作用

    我想用powershell查看一个文件夹 我是PS初学者 当我启动脚本时 该脚本只能运行一次 但是 当我因为更改了一些脚本代码而必须再次重新启动脚本时 我收到此错误消息 Cannot subscribe to the specified e
  • 如何将选择字段的文本转换为图标?

    救救吧 伙计们 我的共享点页面中有一个选择字段 其中的选项如下 1 Go 2 Warning 3 Stop 现在 我希望它以图标而不是文本的形式出现在列表中 我有一个可用的 jquery 脚本 但需要很长时间才能搜索所有列表中包含的文本 而
  • 无法获取当前用户:没有可用的 RequestContext

    使用 xsuaa approuter 登录获取登录的用户对象时出现以下异常 User currentUser UserAccessor getCurrentUser 我要在不使用 GuiceFilter 的情况下获取 currentUser
  • 我可以使用 Python 为所有主流浏览器开发扩展吗?

    我可以用吗Python为所有主流浏览器开发扩展 如果不是 那么我需要了解哪些语言来开发扩展 Chrome Firefox Safari IE Opera 大多数扩展只是捆绑的 HTML CSS JS 和图像文件 以及一些元数据 你需要精通
  • 设计方法:过载与开关?

    关于封装设计的性能和可扩展性 最好是 重载 函数名称 让 Mathematica 根据模式 条件 测试以及系统对定义的排序方式来确定要使用哪个版本 或者使用 Switch 或类似命令 构建单个函数来直接求值 Mathematica 的表达能
  • 使用 Flexbox 垂直居中项目

    我正在尝试使用 CSS 的 flexbox 垂直居中项目 而且 我知道如何使用非供应商前缀的代码来做到这一点 但即使使用供应商前缀 我也无法让它在 Webkit Chrome 中工作 我正在尝试垂直对齐 trigger 中的跨度 这是我的C
  • 更新到 Xcode 10.2 后,构建在 testflight 上黑屏

    我的应用程序完美运行 我已将 Xcode 更新到最新的 10 2 版本 但发生了一些奇怪的事情 与任何更新一样 该应用程序在调试器上运行顺利 完全没有问题 当我将一个版本存档到 testflight 时 该版本显示启动画面 然后进入黑屏 不
  • 如何安装 DB2 ODBC 或 OLEDB 驱动程序

    我已经在 Windows 7 Pro 上安装了 IBM DB2 Database Express 现在 我想创建 C 代码以便在 DB2 表中选择 插入 更新记录 我花了一整天的时间在互联网上搜索有关如何安装 OLEDB 或 ODBC 驱动
  • vue js 2 对表格进行排序

    我有两个关于 vue js 2 的问题和一个小提琴 https jsfiddle net tmun9cxa 1 https jsfiddle net tmun9cxa 1 当您单击列标题时 为什么我的排序不起作用 解决办法是什么 如何让搜索