【vue学习笔记】用监视属性watch和计算属性computed实现模糊查询以及排序

需要实现的功能:根据用户书的的内容显示相应的内容,模糊查询

一.模糊查询

1.用监视属性watch写

<!-- 模糊查询 -->
    <div class="root">
        <input type="text" placeholder="请输入姓名" v-model="name">
        <ul>
            <li v-for="(p, index) in filPerson" :key="person.id">
                {{p.name}}--{{p.age}}--{{p.sex}}
            </li>
        </ul>
    </div>
new Vue({
            el: '.root',
            data() {
                return {
                    name: '',
                    person: [
                        { id: 002, name: '周冬雨', age: 20, sex: '女' },
                        { id: 004, name: '周杰伦', age: 21, sex: '女' },
                        { id: 003, name: '温兆伦', age: 22, sex: '男' },
                        { id: 001, name: '马冬梅', age: 19, sex: '男' },
                    ],
                    filPerson: []
                }
            },
            watch: {
                // name(val){
                //     //filters 过滤过滤完后数组不受影响,因为filters会返回一个全新的数组
                //     this.filPerson = this.person.filter((p)=>{
                //         //return 后写的是你需要的条件
                //         return p.name.indexOf(val) !== -1
                //     })
                // }
                name: {
                    immediate: true,   //立即执行
                    handler(val) {
                        this.filPerson = this.person.filter((p) => {
                            //return 后写的是你需要的条件
                            return p.name.indexOf(val) !== -1
                        })
                    }
                }
            }
        })

2.用计算属性computed写

<!-- 模糊查询 -->
    <div class="root">
        <input type="text" placeholder="请输入姓名" v-model="name">
        <ul>
            <li v-for="(p, index) in filPerson" :key="person.id">
                {{p.name}}--{{p.age}}--{{p.sex}}
            </li>
        </ul>
    </div>
new Vue({
            el: '.root',
            data() {
                return {
                    name: '',
                    person: [
                        { id: 002, name: '周冬雨', age: 20, sex: '女' },
                        { id: 004, name: '周杰伦', age: 21, sex: '女' },
                        { id: 003, name: '温兆伦', age: 22, sex: '男' },
                        { id: 001, name: '马冬梅', age: 19, sex: '男' },
                    ]
                }
            },
            computed: {   //当computed和watch都可以写的时候,用computed会简单点
                filPerson() {
                    return this.person.filter((p) => {
                        return p.name.indexOf(this.name) !== -1
                    })
                }
            }
        })

二.模糊查询+排序

<!-- 模糊查询+排序 -->
    <div class="root">
        <input type="text" placeholder="请输入姓名" v-model="name">
        <button @click="sortType=0">原顺序</button>
        <button @click="sortType=1">年龄降序</button>
        <button @click="sortType=2">年龄升序</button>
        <ul>
            <li v-for="(p, index) in filPerson" :key="person.id">
                {{p.name}}--{{p.age}}--{{p.sex}}
            </li>
        </ul>

    </div>
new Vue({
            el: '.root',
            data() {
                return {
                    name: '',
                    sortType: 0, //0为原顺序  1降序 2升序
                    person: [
                        { id: 002, name: '周冬雨', age: 20, sex: '女' },
                        { id: 004, name: '周杰伦', age: 21, sex: '女' },
                        { id: 003, name: '温兆伦', age: 22, sex: '男' },
                        { id: 001, name: '马冬梅', age: 19, sex: '男' },
                    ]
                }
            },
            computed: {   //当computed和watch都可以写的时候,用computed会简单点
                filPerson() {
                    let arr = this.person.filter((p) => {
                        return p.name.indexOf(this.name) !== -1
                    })
                    //先判断是否需要排序
                    if (this.sortType) {
                        arr.sort((p1, p2) => {
                            return this.sortType === 1 ? p2.age - p1.age : p1.age - p2.age
                        })

                    }
                    return arr;
                }
            }
        })

三.最终效果

1.模糊查询最终效果
在这里插入图片描述

在这里插入图片描述
2.排序最终效果
降序
在这里插入图片描述
升序
在这里插入图片描述

四.总结

在相同情况下,用计算属性computed写会简单点

  • 1
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arthay

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值