wuyunna
    <!--new 的 vue 实例会控制这个元素中的所有内容,也是MVVM中的 V -->
        <div id="app">
            <div class="panel panel-primary">
                <div class="panel-heading">
                    <h3 class="panel-title">添加效果</h3>
                </div>
                <div class="panel-body form-inline">
                    <label>Id: <input type="text" class="form-control" v-model="id"/></label>
                    <label>Name: <input type="text" class="form-control" v-model="name"/></label>
                    <input type="button" value="添加" class="btn btn-primary" @click="add"/>
                    <label>搜索关键字: <input type="text" class="form-control" v-model="keywords"/></label>
                </div>
            </div>

            <table class="table table-bordered table-hover table-striped">
                <thead>
                <tr>
                    <th>Id</th>
                    <th>Name</th>
                    <th>Ctime</th>
                    <th>Operation</th>
                </tr>
                </thead>
                <tbody>
                <!--自定义 search 方法,把关键字通过传参的形式,传递给 search方法,在 search 方法内部,通过 执行 for循环,把所有符合 搜索关键字的数据,保存到一个新数据中,返回 -->
                <tr v-for="item in search(keywords)" :key="item.id">
                    <td>{{ item.id }}</td>
                    <td>{{ item.name }}</td>
                    <td>{{ item.ctime }}</td>
                    <td>
                        <a href="" @click.prevent="del(item.id)">删除</a>
                    </td>
                </tr>
                </tbody>
            </table>
        </div>

  

   <script>
       //创建一个vue的实例,也是MVVM中的 VM调度者,里面可传配置对象
            var vm = new Vue({
                el:"#app",
                //data指MVVM中的 M ,用来存 el 中用的数据
                data:{
                    id:"",
                    name:"",
                    keywords:"",
                    list:[
                        {id:1, name:\'名字1\', ctime:new Date()},
                        {id:2, name:\'名字2\', ctime:new Date()}
                    ]
                },
                methods:{
                    add:function(){
                        var abc = {id:this.id, name:this.name, ctime:new Date()}
                        this.list.push(abc);
                        this.id = this.name = ""
                    },
        //        删除事件逻辑:
        //          1.删除的时候一般是根据 id 来进行删除的
        //          2.给个点击事件,取消默认事件,因为要通过id来删,所以将id传个参    @click.prevent="del(item.id)"
        //          3.定义 del 的方法(函数,点击事件)
        //          4.函数中 传参id,根据id删除数据
        //          5.分析:
        //              i:根据id,找到当前的索引
        //              ii:找到索引了,根据 数组的 splice 方法进行删除
        //          6.注意: forEach  some  filter  findIndex     这些都属于数组的新方法
        //              forEach : 没有办法终止
        //              some : 通过 return:true 可以终止
        //              filter : 过滤,符合条件的
        //              findIndex : 找到数组对应的索引,专门查找索引
        //          7.之所以用到some ,是因为找到要删除的 id后,就终止了循环
        //              some和findIndex的区别:some方法中可以做任何事情,但是findIndex是专门用来查索引的
                    del:function(id){
        //              一种写法:
        //              this.list.some((item,i)=>{
        //                 if(item.id == id){
        //                   .splice(2,3) 从索引为 i(或者2) 开始,删除 1(或者3) 个
        //                   this.list.splice(i,1)
        //                   终止循环
        //                   return true;
        //                 }
        //              });
        //              另一种写法:
                        var index = this.list.findIndex(item =>{
                            if(item.id == id){
                                return true;
                            }
                        });
                        this.list.splice(index,1)
                     },

                    search:function(keywords){
                        var newList = []
                        this.list.forEach(item=>{
                          if(item.name.indexOf(keywords) != -1){
                            newList.push(item)
                         }
                        })
                       return newList;


            //          return this.list.filter(item =>{
            //            if(item.name.indexOf(keywords) != -1)
            //              ES6中,为字符串提供了一个新的方法,String.prototype.includes(\'要包含的字符串\'),如果包含,则返回 true ,否则返回 false
            //              if(item.name.includes(keywords)){
            //                 return  item
            //              }
            //           })
                  }
                }
             })
        </script>

  

分类:

技术点:

相关文章: