列表过滤需求分析
![17_Vue列表过滤_js模糊查询](http://shimg.jingyanzongjie.com/230727/025523C41-0.png)
文章插图
- 这里呢有张列表,假设这个列表有一百多条数据
- 当我在这个 搜索框当中 搜索 单个关键字的时候 (冬,周,伦),它能把带了这几个关键字的信息都给我罗列出来 === 跟数据库的 模糊查询类似
- 这个需求很常见,请你实现一下
前置API的复习filter该API内部需要接受一个参数,这个参数类型是函数类型
![17_Vue列表过滤_js模糊查询](http://shimg.jingyanzongjie.com/230727/0255235013-1.png)
文章插图
- 原生js提供的一个过滤数据的API
- 参考链接
- 写个用法吧
const array = [14, 17, 18, 32, 33, 16, 40];let newArr = array.filter(function(item){ // item 就是该数组当中的每一项// 该API需要提供一个返回值,这个返回值是一个判定条件return item > 14})// 最终结果 newArr = [17,18,32,33,16,40] 将14过滤掉了
- filter并不会改变原有数组的结构,会返回一个新的数组
计算属性实现使用计算属性来实现可能要麻烦点,但是我会详细的把步骤写下来
知识回顾
- 计算属性是vue当中的一个配置项,computed
- computed当中,计算属性由两部分组成(key:{} == 属性名,类型为对象)
computed:{ Calculate:{ }}
- 书写方式两种,如果不需要对计算属性进行修改,那么可以舍弃set配置项的编写,从而将计算属性写为函数形式,函数内部的内容代表的就是get配置项的内容
- get配置项
- 该计算属性被访问的时候调用,所依赖的数据被修改的时候,也会更新
- set配置项
- 当计算属性整体被修改的时候调用,因为计算属性依赖于其他属性,所以修改的时候要修改计算属性所依赖的属性
computed:{ Calculate:{get(){},set(){} }}
- get配置项
当所依赖的属性发生修改的时候,计算属性的get调用,而我们的模糊查询,就在get当中实现
在get当中实现,那么就可以使用计算属性的简写形式
业务实现
- 首先我们需要一个input框,在input框中,设置一个v-model双向绑定(与data当中的数据绑定)
- filePersons所依赖的数据就是 keyWords
- keyWords需要参与运算
- 那剩下的结构就很简单了,ul与li标签渲染数据
<!-- 创建一个容器 --><div class="app"><!-- 模糊查询 --><input type="text" v-model="keyWords"><!-- 列表渲染 --><ul><li v-for="item in filterPersons" :key="item.id">{{item.name}} - {{item.age}} - {{item.sex}}</li></ul></div>
js<script>const vm = new Vue({el: '.app',data: {name: 'wavesbright',keyWords:"",// 原始数据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:"男"},],},methods: {},// 计算属性computed:{// key:{} == 属性名,类型为对象filterPersons(){return this.persons.filter((item) => {return item.name.indexOf(this.keyWords) != -1})}}});</script>
实现效果【17_Vue列表过滤_js模糊查询】注意观察 右边数据的变化![17_Vue列表过滤_js模糊查询](https://m.360buyimg.com/jdcms/jfs/t1/111673/23/31434/169067/635ce01bE396c4aaf/1ffedc3acc0ac3ed.gif)
经验总结扩展阅读
- 8_vue是如何进行数据代理的
- h函数 vue3渲染函数的变化
- Filter Spring中过滤器和拦截器(Interceptor)的区别和联系
- 从0搭建vue3组件库:自动化发布、管理版本号、生成 changelog、tag
- 9_Vue事件修饰符
- 【vue2】Style和Class,条件,列表渲染,双向数据绑定,事件处理
- 从0搭建vue3组件库: 如何完整搭建一个前端脚手架?
- 关于 Vue 中 h 函数的一些东西
- vue3中$attrs的变化与inheritAttrs的使用
- 7_vue的数据代理,双向绑定