源码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>列表过滤</title>
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body>
        <!-- 准备好一个容器-->
        <div id="root">
            <h2>人员列表</h2>
            <input type="text" placeholder="请输入名字" v-model="keyWord">
            <ul>
                <li v-for="(p,index) of filPerons" :key="index">
                    {{p.name}}-{{p.age}}-{{p.sex}}
                </li>
            </ul>
        </div>

        <script type="text/javascript">
            Vue.config.productionTip = false

            //用watch实现
            //#region 
            /* new Vue({
                el:'#root',
                data:{
                    keyWord:'',

                    //原则: 不要修改源数据
                    persons:[
                        {id:'001',name:'马冬梅',age:19,sex:'女'},
                        {id:'002',name:'周冬雨',age:20,sex:'女'},
                        {id:'003',name:'周杰伦',age:21,sex:'男'},
                        {id:'004',name:'温兆伦',age:22,sex:'男'}
                    ],
                    filPerons:[]
                },
                watch:{
                    keyWord:{
                        immediate:true,     //立刻执行hander(val) ,由于此时我没有输入,那么 val='' , .indexof('')返回的索引值为0
                        handler(val){
                            this.filPerons = this.persons.filter((p)=>{
                                return p.name.indexOf(val) !== -1
                            })
                        }
                    }
                }
            }) */
            //#endregion

            //用computed实现
            new Vue({
                el:'#root',
                data:{
                    keyWord:'',
                    persons:[
                        {id:'001',name:'马冬梅',age:19,sex:'女'},
                        {id:'002',name:'周冬雨',age:20,sex:'女'},
                        {id:'003',name:'周杰伦',age:21,sex:'男'},
                        {id:'004',name:'温兆伦',age:22,sex:'男'}
                    ]
                },
                computed:{
                    filPerons(){
                        /*.filter() 过滤掉不想要的,留下想要的。
                            (p) 拿到形参p, 它是persons中每个人的对象
                            (p)=>{return ...} 后面跟过滤的条件(也就是 想要内容 需要 满足的条件)
                            .indexof() 返回包含的字符的索引位置,从0开始编号。 注意: 默认.indexof('')匹配空字符 返回的索引值为0 和匹配的第0个字符返回的索引值0相同。
                        */
                        //返回 新数组的值
                        return this.persons.filter((p)=>{
                            //此处的返回,是 .filter 规定的一个返回的条件:想要内容 需要 满足的条件
                            return p.name.indexOf(this.keyWord) !== -1
                        })
                    }
                }
            }) 
        </script>
</html>