Vue 15 - 列表过滤和排序

文章介绍了如何在Vue.js应用中结合HTML和VueScript实现列表的过滤与排序功能。通过添加升序、降序和原顺序按钮,根据用户点击动态改变排序方式。同时展示了如何在计算属性中实现过滤和排序的逻辑,以及提供的全部代码示例。
摘要由CSDN通过智能技术生成

目录

前言

HTML文本

Vue Script脚本

演示效果

全部代码


前言

在前一个章节的基础上,如果我们还想加一个排序的过程应该如何修改呢?

要求:

1. 添加升序,降序,原顺序按钮进行列表排序

2. 过滤和排序可以结合使用

HTML文本

可以添加三个按钮,用v-on指令结合js表达式去分别标识升序,降序,原顺序,如0,1,2。代码如下。

        <button v-on:click="sortType=2">年龄升序</button>
        <button v-on:click="sortType=1">年龄降序</button>
        <button v-on:click="sortType=0">原顺序</button>

Vue Script脚本

在原来的computed的filPersons中除了过滤人名以外,在对sortType进行判断,0的时候不去做修改,1时降序,2时升序。

        computed: {
            filPersons() {
                // 计算属性规定,需要返回知道是什么值
                const arr = this.personArr.filter((p) => {
                    //过滤语法规定,需要return返回值
                    return p.name.indexOf(this.nameKeyWord) !== -1
                })
                //判断是否需要排序, 当sortType有值时
                if(this.sortType){
                    // 拿到过滤后的数组在排序
                    arr.sort((p1, p2)=>{
                        return this.sortType ===1?p2.age - p1.age : p1.age - p2.age
                    })
                }
                return arr
            }
        }

演示效果

过滤+ 排序效果如下

 

 

全部代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>基本列表</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <!-- 遍历数组, 用的最多-->
        <h2>人员列表</h2>
        <!-- <button v-on:click.once="addPerson">添加人员</button> -->
        <input type="text" placeholder="请输入名字" v-model="nameKeyWord">
        <button v-on:click="sortType=2">年龄升序</button>
        <button v-on:click="sortType=1">年龄降序</button>
        <button v-on:click="sortType=0">原顺序</button>
        <ul>
            <!-- index是遍历时候的索引值,小括号可以不写,写了更加安全,不会引发不必要的问题 -->
            <li v-for="(p, index) in filPersons" :key="p.id">{{p.name}} - {{p.age}} - {{p.sex}}</li>
        </ul>
    </div>

</body>
<script>
    Vue.config.productionTip = false // 阻止vue在启动时生成生产提示
    new Vue({
        el: '#root',
        data: {
            personArr: [
                { id: "001", name: '张译', age: 45, sex: '男' },
                { id: "002", name: '张颂文', age: 43, sex: '男' },
                { id: "003", name: '肖战', age: 18, sex: '男' },
                { id: "004", name: '赵丽颖', age: 21, sex: '女' },
            ],
            nameKeyWord: '',
            sortType: 0 // 0 原顺序,1 降序, 2 升序
        },
        computed: {
            filPersons() {
                // 计算属性规定,需要返回知道是什么值
                const arr = this.personArr.filter((p) => {
                    //过滤语法规定,需要return返回值
                    return p.name.indexOf(this.nameKeyWord) !== -1
                })
                //判断是否需要排序, 当sortType有值时
                if(this.sortType){
                    // 拿到过滤后的数组在排序
                    arr.sort((p1, p2)=>{
                        return this.sortType ===1?p2.age - p1.age : p1.age - p2.age
                    })
                }
                return arr
            }
        }
    })
</script>

</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值