5. 列表的过滤与排序

HTML

<div id="root">
    <h2>人员列表</h2>
    <input type="text" placeholder="请输入名字" v-model="keyWord">
    <button @click="sortType=2">年龄升序</button>
    <button @click="sortType=1">年龄降序</button>
    <button @click="sortType=0">原顺序</button>
    <ul>
        <li v-for="(p,index) in filPersons" :key="p.id">
            {{p.name}}-{{p.age}}-{{p.sex}}
        </li>
    </ul>
</div>

JS

new Vue({
    el: "#root",
    data: {
        keyWord: "",
        sortType: 0, //0为原顺序 1为降序 2为升序
        persons: [
            {id: "001", name: "马冬梅", age: 19, "sex": "女"},
            {id: "002", name: "周冬雨", age: 20, "sex": "女"},
            {id: "003", name: "周杰伦", age: 21, "sex": "男"},
            {id: "004", name: "温兆伦", age: 22, "sex": "男"}
        ],
    },
    //用computed实现
    computed: {
        filPersons() {
            const arr = this.persons.filter((p) => {
                //过滤条件
                return p.name.indexOf(this.keyWord) !== -1;
            })
            //判断试下是否排序 0为falst 1和2为true
            if (this.sortType) {
                arr.sort((p1, p2) => {
                    return this.sortType === 1 ? p2.age - p1.age : p1.age - p2.age;
                })
            }
            return arr;

        }
    }
})
过滤排序逻辑

当点击排序按钮时,Vue中的sortType进行改变,Vue中的监视属性检测到sortType进行改变了,所以执行filPersons方法,返回一个过滤并进行排序后的一个数组,当filPersons变化后,页面中使用到filPersons的地方进行重新渲染

最后修改:2023 年 01 月 31 日
如果觉得我的文章对你有用,请随意赞赏