Vue 使用监视属性 和 计算属性实现列表过滤 详细解释

举报
可期 发表于 2021/12/07 12:06:46 2021/12/07
【摘要】 任何一个人都无法达到你对他的全部预设,把美好的生活寄托在自己身上今天的任务是实现列表过滤 Vue 使用两种方式实现列表过滤下面让我们一步一步完成任务:第一步:先编写html代码<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content...

任何一个人都无法达到你对他的全部预设,把美好的生活寄托在自己身上

今天的任务是实现列表过滤

Vue 使用两种方式实现列表过滤

下面让我们一步一步完成任务:

第一步:先编写html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>列表过滤</title>
    <script src="../Vue.js/vue.js"></script>
</head>
<body>
    <div id="root">
        <h1>人员列表</h1>
        <input type="text" placeholder="请输入名字" v-model="keyword">
        <ul>
            <li v-for="(p,index) in filePerson" :key="index">
                {{p.name}}--{{p.age}}--{{p.sex}}
            </li>
        </ul>
    </div>
</body>
</html>

使用vue实现遍历需要使用v-for 遍历person中的内容。首先获取到原数据

<input type="text" placeholder="请输入名字" v-model="keyword">

此处使用v-model 可实现数据双向绑定,即可以获取用户输入的内容,也可以访问原数据内容,这样就可以实现通过用户输入在原数据中获取相关数据

第二步:在Vue中将原数据保存在一个数组中

const vm = new Vue({
            el:'#root',
            data:{
                keyword:'',
                person:[
                    {id:'001',name:'马冬梅',age:'10',sex:'女'},
                    {id:'002',name:'周冬梅',age:'40',sex:'女'},
                    {id:'003',name:'周杰伦',age:'30',sex:'男'},
                    {id:'004',name:'温兆伦',age:'60',sex:'男'}               
                ]
                         
            },

这里将原数据保存在名为person的数组中

keyword:''

设置keyword来获取data中数据,一开始没有内容我们用空串

第三步:编写计算属性实现过滤功能

<script>
	computed:{
       filePerson(){
           return this.person.filter((p)=>{
           return p.name.indexOf(this.keyword) !== -1
                 })
                }
            }
        })
    </script>

首先计算属性我们需要使用computed,在这里我们可看到新建了一个filePerson,这里是因为我们在实现过滤功能后会改变原界面,如果直接操作原数据会造成无法恢复原界面,所以我们直接保存一个数组,来访问新建的数组这样就不会破坏原数据。

 return this.person.filter((p)=>{
 return p.name.indexOf(this.keyword) !== -1

这里才是核心要素

filter()函数,会创建一个新的数组,来检查指定数组中符合条件的元素,
filter()不会改变原数组,不会对空数组进行检测

indexOf() 方法会返回某个字符串首次出现的位置,此处检查keyword中是否含有name为指定字符串的数据。
此方法对大小写比较敏感,如果检索的字符串没有出现则会返回-1.

当然我们也可以使用检监测属性完成列表过滤

代码如下:

new Vue({
            el:'#root',         
            data:{
                keyword:'',
                person:[
                    {id:'001',name:'马冬梅',age:'20',sex:'女'},
                    {id:'002',name:'周冬梅',age:'20',sex:'女'},
                    {id:'003',name:'周杰伦',age:'20',sex:'男'},
                    {id:'004',name:'温兆伦',age:'20',sex:'男'}               
                ],
                filePerson:[]
            },
            watch:{
                keyword:{
                    immediate:true,
                    handler(val){
                        this.filePerson = this.person.filter((p)=>{
                            return p.name.indexOf(val) !== -1
                        })
                    }
                }
            }
        })

这里我们同样是操作filePerson中的数据不改变原数据

以上是我学习的知识如有不对的地方还请指出,我们共同进步

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。