1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. </head>
    7. <body>
    8. <script type="text/javascript" src="https://unpkg.com/vue/dist/vue.js"></script>
    9. <div id="app">
    10. 过滤:<input type="text" v-model="keyword" >
    11. <ul>
    12. <li v-for="(p,index) in newp">
    13. {{ p.name }} {{ p.sex }}
    14. </li>
    15. </ul>
    16. </div>
    17. <script type="text/javascript">
    18. var vm = new Vue({
    19. el:'#app',
    20. data : {
    21. keyword: '',
    22. persons : [
    23. {id: '001',name:'马冬梅', age:19, sex: '女'},
    24. {id: '002',name:'周冬雨', age:20, sex: '女'},
    25. {id: '003',name:'周杰伦', age:21, sex: '男'},
    26. {id: '004',name:'温兆伦', age:22, sex: '男'},
    27. ],
    28. newp : [
    29. {id: '001',name:'马冬梅', age:19, sex: '女'},
    30. {id: '002',name:'周冬雨', age:20, sex: '女'},
    31. {id: '003',name:'周杰伦', age:21, sex: '男'},
    32. {id: '004',name:'温兆伦', age:22, sex: '男'},
    33. ],
    34. },
    35. watch: {
    36. keyword(val){
    37. //例如,在一个Array中,删掉偶数,只保留奇数,可以这么写:
    38. // var arr = [1, 2, 4, 5, 6, 9, 10, 15];
    39. // var r = arr.filter(function (x) {
    40. // return x % 2 !== 0;
    41. // });
    42. // r; // [1, 5, 9, 15]
    43. var r = this.persons.filter(function (p) {
    44. return p.name.indexOf(val) !== -1;
    45. });
    46. // var r = this.persons.filter((p) => {
    47. // return p.name.indexOf(val) !== -1;
    48. // });
    49. this.newp = r
    50. }
    51. }
    52. })
    53. </script>
    54. </body>
    55. </html>

    补充两个小点:
    1.indexOf(“”)永远是返回0的
    2.另外以上例子我们引入了persons 和 newp,并在开始的时候就赋予了两个值,看起来“很傻”,我们给newp赋值的初衷是因为我们刚打开页面的时候页面是需要显示值的
    根据以上两点我们可以使用 watch的immediate属性,配合indexof完成

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
    
        <script type="text/javascript" src="https://unpkg.com/vue/dist/vue.js"></script>
    
        <div id="app">
            过滤:<input type="text" v-model="keyword" >
    
            <ul>
                <li v-for="(p,index) in newp">
                    {{ p.name }} {{ p.sex }}
                </li>
            </ul>
        </div>
        <script type="text/javascript">
                var vm = new Vue({
                    el:'#app',
                    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: '男'},
                        ],
                        newp : [],
                    },
                    watch: {
                        keyword: {
                                immediate: true,
                                handler(val){
                                    var r = this.persons.filter(function (p) {
                                        return p.name.indexOf(val) !== -1;
                                    });
                                    this.newp = r
                                }
    
                            }
    
    
                        }
                })
        </script>
    
        </body>
    </html>
    

    使用计算属性(箭头函数的使用)

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
        <body>
    
            <script type="text/javascript" src="https://unpkg.com/vue/dist/vue.js"></script>
    
            <div id="app">
                过滤:<input type="text" v-model="keyword" >
                <ul>
                    <li v-for="(p,index) in newP">
                        {{ p.name }} {{ p.sex }}
                    </li>
                </ul>
            </div>
    
            <script type="text/javascript">
                var vm = new Vue({
                    el:'#app',
                    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 : {
                        newP(){
                            **这样就不行,这样不行的原因是this代表了function**
                            // return this.persons.filter(function (p){
                            //     return p.name.indexOf(this.keyword) !== -1;
                            // })
    
                            我们可以这样写
                            const that = this
                            return this.persons.filter(function (p){
                                return p.name.indexOf(that.keyword) !== -1;
                            })
    
                            第三种方式,箭头函数
                            // return this.persons.filter(p => {
                            //     return p.name.indexOf(this.keyword) !== -1;
                            // })
                        }
                    }
                })
            </script>
        </body>
    </html>