iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue 列表过滤与排序的实现
  • 872
分享到

Vue 列表过滤与排序的实现

2024-04-02 19:04:59 872人浏览 独家记忆
摘要

目录一、数据过滤watch实现computed 实现二、列表排序三、数据更新的一个问题四、Vue.set 方法五、Vue监视数据的原理六、综合练习一、数据过滤 watch实现 <

一、数据过滤

watch实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue初识</title>
    <script type="text/javascript" src="./js/vue.js"></script>
</head>
<body>
<div id="root">
    <!--遍历数组-->
    <h2>人员列表(遍历数组)</h2>
    <input type="text" placeholder="请输入名字" v-model="keyWord"/>
    <ul>
        <li v-for="(p,index) in filterPersons" :key="p.id">
            {{p.name}}--{{p.age}}---{{p.sex}}
        </li>
    </ul>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false
    //创建vue实例
    new Vue({
        el: "#root",
        data: {
            keyword: '',
            persons: [
                {id: 1, name: "马冬梅", age: 18, sex: "女"},
                {id: 2, name: "周冬雨", age: 19, sex: "女"},
                {id: 3, name: "周杰伦", age: 20, sex: "男"},
                {id: 4, name: "温兆伦", age: 21, sex: "男"},
            ],
            filterPersons: []
        },
        watch: {
            keyword: {
                immediate: true,
                handler(val) {
                    this.filterPersons = this.persons.filter((p) => {
                        return p.name.indexOf(val) !== -1
                    })
                }
            }
        }
    })
</script>
</body>
</html>

computed 实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue初识</title>
    <script type="text/javascript" src="./js/vue.js"></script>
</head>
<body>
<div id="root">
    <!--遍历数组-->
    <h2>人员列表(遍历数组)</h2>
    <input type="text" placeholder="请输入名字" v-model="keyword"/>
    <ul>
        <li v-for="(p,index) in filterPersons" :key="p.id">
            {{p.name}}--{{p.age}}---{{p.sex}}
        </li>
    </ul>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false
    //创建vue实例
    new Vue({
        el: "#root",
        data: {
            keyword: '',
            persons: [
                {id: 1, name: "马冬梅", age: 18, sex: "女"},
                {id: 2, name: "周冬雨", age: 19, sex: "女"},
                {id: 3, name: "周杰伦", age: 20, sex: "男"},
                {id: 4, name: "温兆伦", age: 21, sex: "男"},
            ]
        },
        computed: {
            filterPersons() {
                return this.persons.filter((p) => {
                    return p.name.indexOf(this.keyword) !== -1
                })
            }
        }
    })
</script>
</body>
</html>

二、列表排序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue初识</title>
    <script type="text/javascript" src="./js/vue.js"></script>
</head>
<body>
<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 filterPersons" :key="p.id">
            {{p.name}}--{{p.age}}---{{p.sex}}
        </li>
    </ul>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false
    //创建vue实例
    new Vue({
        el: "#root",
        data: {
            keyword: '',
            sortType: 0,
            persons: [
                {id: 1, name: "马冬梅", age: 30, sex: "女"},
                {id: 2, name: "周冬雨", age: 31, sex: "女"},
                {id: 3, name: "周杰伦", age: 18, sex: "男"},
                {id: 4, name: "温兆伦", age: 19, sex: "男"},
            ]
        },
        computed: {
            filterPersons() {
                const arr = this.persons.filter((p) => {
                    return p.name.indexOf(this.keyword) !== -1
                })
                if (this.sortType) {
                    arr.sort((p1, p2) => {
                        return this.sortType == 1 ? p2.age - p1.age : p1.age - p2.age
                    })
                }
                return arr
            }
        }
    })
</script>
</body>
</html>

三、数据更新的一个问题

首先演示更新时的一个问题,页面增加一个按钮,点击更新马冬梅的信息。先演示奏效的方法:

<button @click="updateMei">更新马冬梅信息</button>
		methods:{
            updateMei(){
                this.persons[0].name = "马老师"
                this.persons[0].age = 50
                this.persons[0].sex = "男"
            }
        }

再演示不奏效的方法,修改方法:

		methods:{
            updateMei(){
                //不奏效
                this.persons[0]={id: 1, name: "马老师", age: 50, sex: "男"}
            }
        }

运行程序,点击页面按钮,数据是不发生变化的。

对数组修改时,只有调用数组的相关操作方法才能奏效,包括:

  • push作用:在末尾添加元素
  • pop作用:删除最后一个元素
  • shift作用:删除第一个元素
  • unshift作用:在首位添加元素
  • splice作用:向/从数组添加/删除项目,并返回删除的项目
  • sort作用:对数组的元素进行排序,并返回数组
  • reverse作用:反转数组中元素的顺序

这样写就可以更新了

this.persons.splice(0,1,{id: 1, name: "马老师", age: 50, sex: "男"})

四、Vue.set 方法

<div id="root">
    <h2>个人信息</h2>
    <h2>姓名:{{name}}</h2>
    <h2>实际年龄:{{age.rAge}}</h2>
    <h2>对外年龄:{{age.sAge}}</h2>
    <h2>学校信息</h2>
    <h2>学校名称:{{school.name}}</h2>
    <h2 v-show="school.address">学校地址:{{school.address}}</h2>
    <button @click="addAddress">添加学校地址属性</button>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false
    //创建vue实例
    new Vue({
        el: "#root",
        data: {
            name:"张三",
            age:{
                rAge:30,
                sAge:25
            },
            school:{
                name:"某不知名大学"
            }
        },
        methods:{
            addAddress(){
        		//以下两种写法都可以
                //Vue.set(this.school,"address","北京")
                this.$set(this.school,"address","北京")
            }
        }
    })
</script>

但是 Vue.set 是有局限的,我们之前给 data 下的 school 增加了地址属性,但是我们不能给 data 直接增加属性

如果页面上有数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue初识</title>
    <script type="text/javascript" src="./js/vue.js"></script>
</head>
<body>
<div id="root">
  	...
    <ul>
        <li v-for="(h,index) in hobby" :key="index">{{h}}</li>
    </ul>

    <button @click="changeHobby">修改爱好</button>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false
    //创建vue实例
    new Vue({
        el: "#root",
        data: {
            ...
            hobby:[
                "抽烟",
                "喝酒",
                "烫头"
            ]
        },
        methods:{
            changeHobby(){
            	//这样改是可以的
                Vue.set(this.hobby,0,"学习")
                //直接修改是有问题的
                //this.hobby[0] = "学习"
            }
        }
    })
</script>
</body>
</html>

五、Vue监视数据的原理

1、vue 会监视 data 中所有层次的数据

2、如何监测对象中的数据?

通过 setter 实现监视,且要在 new Vue时就传入要监测的数据

  • (1).对象中后追加的属性,Vue默认不做响应式处理
  • (2).如需给后添加的属性做响应式,请使用如下api

Vue.set(target. propertyName/index,value)vm.$set(target.propertyName/index,value)

3、如何监测数组中的数据?

通过包裹数组更新元素的方法实现,本质就是做了两件事:

  • (1).调用原生对应的方法对数组进行更新
  • (2).重新解析模板进而更新页面

4、在 Vue 修改数组中的某个元素一定要用如下方法:

  • (1).使用这些API:push()pop()shift()unshift()splice()sort()reverse()
  • (2).Vue.set()vm.$set()

特别注意: Vue.set() 和vm. $set()不能给 vm 或 vm 的根数据对象添加属性!

六、综合练习

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue初识</title>
    <script type="text/javascript" src="./js/vue.js"></script>
</head>
<body>
<div id="root">
    <h2>个人信息</h2>
    <button @click="student.age++">年龄+1</button>
    <button @click="addSex">添加性别属性,默认值:男</button>
    <button @click="student.sex = '未知'">修改性别</button>
    <h4>姓名:{{student.name}}</h4>
    <h4>年龄:{{student.age}}</h4>
    <h4 v-if="student.sex">性别:{{student.sex}}</h4>
    <br/><br/>
    <button @click="addHobby">添加一个爱好</button>
    <button @click="changeHobby">修改第一个爱好为:开车</button>
    <button @click="filterHobby">过滤掉爱好中的抽烟</button>
    <h2>爱好</h2>
    <ul>
        <li v-for="(h,index) in student.hobby" :key="index">{{h}}</li>
    </ul>
    <br/><br/>
    <button @click="addFriend">在列表首位添加一个朋友</button>
    <button @click="updateFirstFriendName">修改第一个朋友名字为:李四</button>
    <h2>朋友们</h2>
    <ul>
        <li v-for="(f,index) in student.friends" :key="index">{{f.name}}--{{f.age}}</li>
    </ul>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false
    //创建vue实例
    new Vue({
        el: "#root",
        data: {
            student:{
                name: "张三",
                age: 18,
                hobby: [
                    "抽烟",
                    "喝酒",
                    "烫头"
                ],
                friends: [
                    {
                        name: "jerry",
                        age: 20
                    },
                    {
                        name: "tony",
                        age: 19
                    }
                ]
            }
        },
        methods: {
            addSex(){
                //以下两种写法都可以
                //Vue.set(this.student,"sex","男")
                this.$set(this.student,"sex","男")
            },
            addFriend(){
                this.student.friends.unshift({name: "铁柱", age: 25})
            },
            updateFirstFriendName(){
                this.student.friends[0].name = "李四"
            },
            addHobby(){
                this.student.hobby.push("学习")
            },
            changeHobby(){
                //以下三种写法都可以
                //Vue.set(this.student.hobby,0,"开车")
                this.$set(this.student.hobby,0,"开车")
                //从0开始删除1个,插入开车
                //this.student.hobby.splice(0,1,"开车")
            },
            filterHobby(){
                this.student.hobby = this.student.hobby.filter((h)=>{
                    return h !== "抽烟"
                })
            }
        }
    })
</script>
</body>
</html>

到此这篇关于Vue 列表过滤与排序的实现的文章就介绍到这了,更多相关Vue 列表过滤排序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue 列表过滤与排序的实现

本文链接: https://www.lsjlt.com/news/149905.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue 列表过滤与排序的实现
    目录一、数据过滤watch实现computed 实现二、列表排序三、数据更新的一个问题四、Vue.set 方法五、Vue监视数据的原理六、综合练习一、数据过滤 watch实现 <...
    99+
    2024-04-02
  • Vue如何实现列表过滤与排序
    这篇文章主要讲解了“Vue如何实现列表过滤与排序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue如何实现列表过滤与排序”吧!一、数据过滤watch实现<!DOCTYPE ...
    99+
    2023-06-30
  • Vue中如何实现列表渲染,排序,过滤操作
    这篇文章主要为大家展示了“Vue中如何实现列表渲染,排序,过滤操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何实现列表渲染,排序,过滤操作”这篇文章吧。1. 列表(渲染、排序、过滤...
    99+
    2023-06-29
  • Vue的列表之渲染,排序,过滤详解
    目录1. 列表(渲染、排序、过滤)1.1 条件渲染指令1.1.1 v-show1.1.2 v-if1.1.3 v-if和v-show的小案例1.1.4 v-for(key的原理)1....
    99+
    2024-04-02
  • Django实现drf搜索过滤和排序过滤
    前言 当我们需要对后台的数据进行过滤的时候,drf有两种,搜索过滤和排序过滤。 搜索过滤:比如我们想返回sex=1的,那么我们就可以从所有数据中进行筛选 排序过滤:比如我们想对价格进...
    99+
    2024-04-02
  • JavaScript如何过滤并排序字符串列表
    小编给大家分享一下JavaScript如何过滤并排序字符串列表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!过滤并排序字符串列表...
    99+
    2024-04-02
  • SQL如何实现过滤排序
    这篇文章将为大家详细讲解有关SQL如何实现过滤排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 1、where  &n...
    99+
    2024-04-02
  • Vue中使用elementui与Sortable.js实现列表拖动排序
    本文实例为大家分享了使用elementui与Sortable.js实现列表拖动排序的具体代码,供大家参考,具体内容如下 一、安装使用Sortable.js 1、安装 cnpm ins...
    99+
    2024-04-02
  • RiSearch PHP 实现搜索结果的智能排序与过滤
    作为一个开发者,我们经常会遇到需要实现搜索功能的情况。而在实际的项目中,如何对搜索结果进行智能排序和过滤是一个非常关键的问题。本文将介绍如何使用 RiSearch PHP 来实现搜索结果的智能排序与过滤,并提供具体的代码示例。RiSearc...
    99+
    2023-10-21
    过滤 智能排序 RiSearch
  • vue实现列表拖拽排序的示例代码
     本文主要介绍了vue实现列表拖拽排序的示例代码,具体如下: <template> <div class="test_wrapper" @drago...
    99+
    2024-04-02
  • C#SortedList排序列表的实现
    目录SortedList 类的中的属性SortedList 类的中的方法在 C# 中,SortedList 类用来表示键/值对的集合,这些键/值对按照键值进行排序,并且可以通过键或索...
    99+
    2023-05-14
    C# SortedList排序列表 C# 排序列表
  • Vue如何实现数组更新及过滤排序功能
    这篇文章给大家分享的是有关Vue如何实现数组更新及过滤排序功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。变异方法  Vue 包含一组观察数组的变异方法,它们将会触发视图更新,...
    99+
    2024-04-02
  • vue怎么实现列表拖拽排序效果
    这篇文章主要介绍“vue怎么实现列表拖拽排序效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue怎么实现列表拖拽排序效果”文章能帮助大家解决问题。效果如下:<template>&nb...
    99+
    2023-06-29
  • react如何实现列表排序
    今天小编给大家分享一下react如何实现列表排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react实现列表排序的方法:...
    99+
    2023-07-04
  • react怎么实现列表排序
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react 自定义拖拽排序列表一、背景最近在公司开发时,遇到需要自定表单,并且自定表单中的单选和复选选项需要用户可以自定义拖拽排序,经过一个星期的查阅各种...
    99+
    2023-05-14
    React
  • Python 实现过滤掉列表中唯一值
    目录1、filter_unique2、collections.Counter3、列表推导式4、filter_non_unique 1、filter_unique from col...
    99+
    2024-04-02
  • python列表过滤的方法
    在python中,对列表这样的数据结构进行过滤,提取自己需要的元素,组成新的列表,是很常见的操作,这就要自然而然的用到列表过滤了,而常用的过滤当然就是循环后通过if进行,但是这样子,显然就是代码的开支有些大。python中,提供了一个列表...
    99+
    2023-01-31
    方法 列表 python
  • C# SortedList排序列表如何实现
    这篇文章主要讲解了“C# SortedList排序列表如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# SortedList排序列表如何实现”吧!在 C# 中,...
    99+
    2023-07-05
  • react 实现表格列表拖拽排序的示例
    目录问题描述思路解析1. react-sortable-hoc2. array-move问题描述 在项目开发中,遇到这样一个需求:需要对表格里面的数据进行拖拽排序。 效果图如下所示:...
    99+
    2023-02-01
    react 表格列表拖拽排序 react 拖拽排序
  • Vue实用功能之实现拖拽元素、列表拖拽排序
    目录Vue实现拖拽元素、列表拖拽排序组件使用补充:排序动画总结Vue实现拖拽元素、列表拖拽排序 需求:    1、左右两个容器,左边和右边的元素可以拖动...
    99+
    2022-11-13
    vue列表拖拽排序 vue实现拖拽功能 vue实现组件拖拽
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作