列表过滤需求分析

文章插图
- 这里呢有张列表 , 假设这个列表有一百多条数据
- 当我在这个 搜索框当中 搜索 单个关键字的时候 (冬 , 周 , 伦),它能把带了这几个关键字的信息都给我罗列出来 === 跟数据库的 模糊查询类似
- 这个需求很常见,请你实现一下
前置API的复习filter该API内部需要接受一个参数,这个参数类型是函数类型

文章插图
- 原生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>
实现效果注意观察 右边数据的变化
文章插图
关于空串
- 为什么 , input框中没有内容的时候 , 反而数据全部回来了呢?
- 因为这个时候 , input虽然没有内容 , 但是它的value值是一个空字符串
- 空字符串包含在所有字符串当中
- 判定条件自然为true
- 是vue的一个配置项
- 内部采用 键值对来配置属性
watch:{ keyWords:{// 配置项1// 配置项2// 配置项3 }}
- 内部有很多配置项,以handler这个配置项为主
- handler是一个函数类型
- 当数据发生改变的时候调用该配置项
watch:{ keyWords:{// 配置项1// 配置项2// 配置项3handler(newValue,oldValue){// 新数据,原始数据}}}
- handler是一个函数类型
- watch的写法有两种
推荐阅读
- 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的数据代理,双向绑定