Vue(Vue2+Vue3)——16.列表过滤、17.列表排序

简介: Vue(Vue2+Vue3)——16.列表过滤、17.列表排序

Vue(Vue2+Vue3)——16.列表过滤、17.列表排序


16 列表过滤


对已知的列表进行数据过滤(根据输入框里面的内容进行数据过滤)


16.1 编写案例


通过案例来演示说明

效果就是这样的 输入框是模糊查询

想要实现功能,其实就两大步,1获取输入框内容 2根据输入内容进行数据过滤


16.2 绑定收集数据


我们可以使用v-model去双向绑定

这样第一步收集输入数据就完成了

然后就要实现第二步了


16.3 使用watch监视实现


首先使用watch实现,对keyWord进行监视

确认下监视是没有问题的

既然监视是没有问题,就可以写逻辑操作了

这里使用filter进行过滤,使用indexOf判断是否包含内容,大概说下indexOf判断是否包含字符串的一些基本操作,如果返回-1表示不包含,如果包含会返回当前这个字符串所在的下标,所以判断是否包含,只需要知道结果是否等于-1

知道了逻辑以及如何使用api就继续编写代码,这里filer会返回一个新的数组,把过滤出来的新数组替换掉老数组

查看页面,好像是没问题的

但是这时候我换成周,没有数据了


16.4 解决filer问题


导致这个问题的原因是:使用filter过滤出来的新数据已经没有关于周的姓名了,这么写的逻辑就是越搜越少,persons是原数据,原数据不能直接修改,原数据里面的数据是不能改变的

既然这样,我们就新增一个属性,专门存储用来过滤出来的数据

但是发现一个问题,页面初始化的时候是空的

但是输入一个马,然后删除掉,数据就有了

这就要说下indexOf的一个细节,indexOf是可以判断空的,会返回0,判断第一个字符,也会返回0

既然知道这个细节,那么上面这个问题也就解释得通了

想要解决这个bug,就不能使用监视的简写形式了,我们写成正常写法,加上immediate属性设置为true,自动让过滤器执行参数为空

测试页面。没有任何问题



16.5 使用computed计算属性实现


监视可以实现的,computed都可以实现,下面就使用computed的方式把上面的案例实现下

大概逻辑都是一样的,只是一些语法不一样,比如watch里面的参数在computed是没有的,我们可以换成this获取。然后返回出去新的结果

效果也是一样的



16.6 watch和computed对比


通过这个案例知道了使用watch和computed都可以实现,通过对比发现很明显,watch更麻烦一些,computed更精简一些,当两者都能实现的时候,优先使用computed


17 列表排序


17.1 编写案例



  • 在列表过滤的基础上新增一个功能,可以安装指定的条件进行升序或者降序(自上而下)
  •  这里补充下,鼠标远中一行,然后按alt+shift+↓可以复制一行,和IDEA里面的ctrl+d是一样的

查看页面

为了方便实现,给三个不同的按钮单击定义不同的数字含义,原顺序为0,降序为1,升序为2,可以定义出来这个变量,然后根据每一个按钮的单击事件传入不同的参数

然后在过滤的逻辑上进行修改,先不要返回,等根据年龄排序过滤好之后再进行返回

js说到排序,就不得不提起sort这个函数,这里就简单说下sort的使用


17.2 sort排序简单说明


sort函数有两个参数(max,min),如果需要升序就用max-min,如果需要降序就用min-max,需要用return把排好序的数组返回出来,排序后的数组会覆盖原来的数组

排序

降序

既然知道了使用sort的方式,就可以完善代码逻辑了,在这里不能直接使用参数本身,而是对象里面的age属性进行排序

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>初始vue</title>
    <!-- 引入vue.js -->
    <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="(person,index) of filPersons" :key="index">
                {{person.name}}-{{person.age}}-{{person.sex}}
            </li>  
       </ul>
    </div>
</body>
<script type="text/javascript">
     const vm=  new Vue({
        el:'#root',
        data:{
            // 输入框输入的内容 由于一开始肯定是空的,所以初始化为空
            keyWord:'',
            sortType:'0',  //0原顺序,1降序,2升序
            persons:[
                {id:'001',name:'马冬梅',age:'18',sex:'女'},
                {id:'002',name:'周冬雨',age:'9',sex:'女'},
                {id:'003',name:'周杰伦',age:'31',sex:'男'},
                {id:'004',name:'温兆伦',age:'56',sex:'男'}
            ],
        },
        computed:{
            filPersons(){
                 const arr= this.filPersons= this.persons.filter((p)=>{
                    //name里面是否包含输入框输入的内容 使用indexOf判断是否包含
                    return p.name.indexOf(this.keyWord)!==-1
               })
               // 判断是否需要排序 这样的判读sortType只能是1或者2,0是进不来的
               if(this.sortType){
                    arr.sort((a,b)=>{
                        return  this.sortType===1?b.age-a.age:a.age-b.age
                    })
               }
               //返回最终排序好的数组
               return arr 
            }
        }
    })
</script>
</html>

代码写完后查看页面

升序

降序

原顺序

相关文章
|
3天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
4天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
3天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
3天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
17天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
4天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
4天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
5天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
5天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
10天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发