Vue实现假数据的添加、删除、搜索
HTML
<html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="../lib/vue.js" ></script> <link href="../lib/bootstrap.min.css" /> <!--引入bootstrap框架来写样式--> </head> <body> <div id="app"> <div class="panl panel-primary"> <div class="panel-heading"> <h3 class="panel-title">添加品牌</h3> </div> <div class="panel-body"> <div class="panle-body form-inline"> <lebel> Id:<input type="text" class="form-control" v-model="id" /> </lebel> <lebel> name:<input type="text" class="form-control" v-model="name" /> </lebel> <!---在vue中,使用事件绑定机制,为元素,指定处理函数的时候,如果加了小括号,就可以给函数传参了--> <input type="button" value="添加" class="btn btn-primary" @click="add()" /> <lebel> 搜索名称关键字:<input type="text" class="form-control" v-model="keywords" /> </lebel> </div> </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> <!--之前,v-for中的数据,都是直接从data上的list中直接渲染过来的 现在,我们自定义了一个search方法,同时,把所有的关键字,通过传参的形式,传递给了search方法 在search方法内部,通过执行for循环,把所有符合搜索关键字的数据,保存到一个一个新的数组中,返回, --> <tr v-for="item in search(keywords)" :key="item.id"> <td>{{item.id}}</td> <td v-text="item.name"></td> <td>{{ item.ctime }}</td> <td> <a href="" @click.prevent="del(item.id)">删除</a> </td> </tr> </tbody> </table> </div> </body> </html>
Javascript
<script> var vm=new Vue({ el:'#app', data:{ id:'', name:'', keywords:'', list:[{ id:1, name: "大众", ctime: new Date() }, { id: 2, name: "宝马", ctime: new Date() }, { id: 3, name: "奔驰", ctime: new Date() } ] }, methods: { add() { var car = { id: this.id, name: this.name, ctime: new Date() } this.list.push(car) this.id = this.name = '' //添加后就为空 }, /* 根据id删除数据(两个方法) 方法1,如何根据id,找到要删这一项的索引 方法2,如果找到索引了,直接调用数组的splice方法 */ del(id){ /* this.list.some((item,i)=>{ //数组some()方法中,返回true,就终止这个数组的后续循环 if(item.id==id){ 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(keywords) { //根据关键字,进行数据的搜索 return this.list.filter(item => { //在ES6中,为字符串提供了个新方法,加做String.prototype.includes('要包含的字符串') //如果包含,则返回true,否则返回false if(item.name.includes(keywords)) { return item; } }) } } }) </script>
(时间格式那边可能不太标准,可用过滤器替换)