Vue—列表过滤与列表排序

列表过滤:
用watch实现:

<script>
    new Vue({
        el:'#root',
        data:{
            keyword:'',
          person:[
            {id:'001',name:'马冬梅',age:18,sex:'女'},
            {id:'002',name:'周冬雨',age:19,sex:'女'},
            {id:'003',name:'周杰伦',age:20,sex:'男'},
            {id:'004',name:'温兆伦',age:22,sex:'男'},
          ],
          filPerson:[]
        },
        watch:{
            keyword:{
                //防止一开始没有数据显示
                immediate:true,
                //防止模板改变,所以要有个定义
                //!不能修改原数组
                handler(val){
                    this.filPerson=this.person.filter((p)=>{
                        return p.name.indexOf(val)  !== -1
                    })
                }
               
            }
        }
    })
</script>
用computed实现:

<script>
    new Vue({
        el:'#root',
        data:{
            keyword:'',
            person:[
              {id:'001',name:'马冬梅',age:18,sex:'女'},
              {id:'002',name:'周冬雨',age:19,sex:'女'},
              {id:'003',name:'周杰伦',age:20,sex:'男'},
              {id:'004',name:'温兆伦',age:22,sex:'男'},
            ],
        },
        computed:{
            filPerson(){
                return this.filPerson=this.person.filter((p)=>{
                    return p.name.indexOf(this.keyword)  !== -1
                })
            }
        }
    })
</script>
<body>
    <div id="root">
        <!--遍历数组是用的最多的-->
        <h2>列表</h2>
        <input type="text" placeholder="请输入名字" v-model="keyword">
        <ul>
            <li v-for="(per,index) in filPerson" :key="per.id">
                {{per.name}}-{{per.age}}-{{per.sex}}
            </li>
        </ul>
    </div>
</body>
列表排序

<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="(per,index) in filPerson" :key="per.id">
                {{per.name}}-{{per.age}}-{{per.sex}}
            </li>
        </ul>
    </div>
</body>
<script>
    new Vue({
        el:'#root',
        data:{
            keyword:'',
            sortType:0,
            person:[
              {id:'001',name:'马冬梅',age:18,sex:'女'},
              {id:'002',name:'周冬雨',age:19,sex:'女'},
              {id:'003',name:'周杰伦',age:20,sex:'男'},
              {id:'004',name:'温兆伦',age:17,sex:'男'},
            ],
        },
        computed:{
            filPerson(){
                const arr=this.filPerson=this.person.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>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值