案例需求:
创建一个品牌展示表格,表头有编号(id),品牌名称(name),创建时间(time)和操作,需要实现的功能是对数据的增删操作,和时间的格式化。
思路分析:
在开发之前需要想清楚要用到Vue中的什么方法或者特性来实现所要的功能,把案例分成以下几个部分来开发:
- 展示数据,需要使用v-for指令
- 删除数据,需要使用v-on绑定一个事件
- 添加数据,需要使用双向数据绑定
- 时间的格式化,需要使用过滤器
实现步骤:
1、开发静态模板
DOCTYPE html>
<html><head><meta charset&#61;"UTF-8"><title>title><script src&#61;"https://cdn.jsdelivr.net/npm/vue">script><style>.box {width: 900px;height: auto;overflow: hidden;margin: 30px auto;}.left {height: 150px;width: 185px;padding: 5px;display: inline-block;border: 1px solid black;}.left input {padding: 2px;margin-top: 10px;}.right {width: 600px;height: auto;display: inline-block;margin-left: 30px;vertical-align: top;}.right table {border-collapse: collapse;width: 580px;}.right table th {background-color: green;padding: 5px;text-align: center;border: 1px solid black;color: #FFFFFF;}.right table tr {text-align: center;}.right table td {border: 1px solid black;}style>head><body><div id&#61;"app"><div class&#61;"box"><div class&#61;"left"><input type&#61;"text" placeholder&#61;"输入编号" /><input type&#61;"text" placeholder&#61;"输入名称" /><br /><input type&#61;"button" value&#61;"添加数据" />div><div class&#61;"right"><table><tr><th>编号th><th>品牌名称th><th>创建时间th><th>操作th>tr><tr><td>1td><td>宝马td><td>2017-12-27td><td><a href&#61;"Javascript:void(0)">删除a>td>tr>table>div>div>div>body>
html>
2、使用v-for指令展示数据
DOCTYPE html>
<html><head><meta charset&#61;"UTF-8"><title>title><script src&#61;"https://cdn.jsdelivr.net/npm/vue">script><style>.box {width: 900px;height: auto;overflow: hidden;margin: 30px auto;}.left {height: 150px;width: 185px;padding: 5px;display: inline-block;border: 1px solid black;}.left input {padding: 2px;margin-top: 10px;}.right {width: 600px;height: auto;display: inline-block;margin-left: 30px;vertical-align: top;}.right table {border-collapse: collapse;width: 580px;}.right table th {background-color: green;padding: 5px;text-align: center;border: 1px solid black;color: #FFFFFF;}.right table tr {text-align: center;}.right table td {border: 1px solid black;}style>head><body><div id&#61;"app"><div class&#61;"box"><div class&#61;"left"><input type&#61;"text" placeholder&#61;"输入编号" /><input type&#61;"text" placeholder&#61;"输入名称" /><br /><input type&#61;"button" value&#61;"添加数据" />div><div class&#61;"right"><table><tr><th>编号th><th>品牌名称th><th>创建时间th><th>操作th>tr><tr v-for&#61;"item in list"><td>{{item.id}}td><td>{{item.name}}td><td>{{item.time}}td><td><a href&#61;"Javascript:void(0)">删除a>td>tr>table>div>div>div><script>var vm &#61; new Vue({el:&#39;#app&#39;,data:{list:[{"id":1,"name":"宝马","time":new Date()},{"id":2,"name":"奔驰","time":new Date()}]}})script>body>
html>
3、删除数据&#xff0c;在methods中定义删除方法
DOCTYPE html>
<html><head><meta charset&#61;"UTF-8"><title>title><script src&#61;"https://cdn.jsdelivr.net/npm/vue">script><style>.box {width: 900px;height: auto;overflow: hidden;margin: 30px auto;}.left {height: 150px;width: 185px;padding: 5px;display: inline-block;border: 1px solid black;}.left input {padding: 2px;margin-top: 10px;}.right {width: 600px;height: auto;display: inline-block;margin-left: 30px;vertical-align: top;}.right table {border-collapse: collapse;width: 580px;}.right table th {background-color: green;padding: 5px;text-align: center;border: 1px solid black;color: #FFFFFF;}.right table tr {text-align: center;}.right table td {border: 1px solid black;}style>head><body><div id&#61;"app"><div class&#61;"box"><div class&#61;"left"><input type&#61;"text" placeholder&#61;"输入编号" /><input type&#61;"text" placeholder&#61;"输入名称" /><br /><input type&#61;"button" value&#61;"添加数据" />div><div class&#61;"right"><table><tr><th>编号th><th>品牌名称th><th>创建时间th><th>操作th>tr><tr v-for&#61;"item in list"><td>{{item.id}}td><td>{{item.name}}td><td>{{item.time}}td><td><a href&#61;"Javascript:void(0)" &#64;click&#61;"del(item.id)">删除a>td>tr>table>div>div>div><script>var vm &#61; new Vue({el: &#39;#app&#39;,data: {list: [{"id": 1,"name": "宝马","time": new Date()},{"id": 2,"name": "奔驰","time": new Date()}]},methods: {del: function (id) {if (!confirm("是否删除数据&#xff1f;")) {return;}//调用list.findIndex()方法&#xff0c;根据传入的id获取到这个要删除数据的索引值var index &#61; this.list.findIndex(function (item) {return item.id &#61;&#61; id;});//调用list.splice(删除的索引&#xff0c;删除的元素个数)this.list.splice(index, 1);}}})script>body>
html>
4、添加数据&#xff0c;使用双向数据绑定
DOCTYPE html>
<html><head><meta charset&#61;"UTF-8"><title>title><script src&#61;"https://cdn.jsdelivr.net/npm/vue">script><style>.box {width: 900px;height: auto;overflow: hidden;margin: 30px auto;}.left {height: 150px;width: 185px;padding: 5px;display: inline-block;border: 1px solid black;}.left input {padding: 2px;margin-top: 10px;}.right {width: 600px;height: auto;display: inline-block;margin-left: 30px;vertical-align: top;}.right table {border-collapse: collapse;width: 580px;}.right table th {background-color: green;padding: 5px;text-align: center;border: 1px solid black;color: #FFFFFF;}.right table tr {text-align: center;}.right table td {border: 1px solid black;}style>head><body><div id&#61;"app"><div class&#61;"box"><div class&#61;"left"><input type&#61;"text" placeholder&#61;"输入编号" v-model&#61;"id" /><input type&#61;"text" placeholder&#61;"输入名称" v-model&#61;"name" /><br /><input type&#61;"button" value&#61;"添加数据" &#64;click&#61;"add" />div><div class&#61;"right"><table><tr><th>编号th><th>品牌名称th><th>创建时间th><th>操作th>tr><tr v-for&#61;"item in list"><td>{{item.id}}td><td>{{item.name}}td><td>{{item.time}}td><td><a href&#61;"Javascript:void(0)" &#64;click&#61;"del(item.id)">删除a>td>tr>table>div>div>div><script>var vm &#61; new Vue({el: &#39;#app&#39;,data: {id: &#39;&#39;,name: &#39;&#39;,list: [{"id": 1,"name": "宝马","time": new Date()},{"id": 2,"name": "奔驰","time": new Date()}]},methods: {del: function (id) {if (!confirm("是否删除数据&#xff1f;")) {return;}//调用list.findIndex()方法&#xff0c;根据传入的id获取到这个要删除数据的索引值var index &#61; this.list.findIndex(function (item) {return item.id &#61;&#61; id;});//调用list.splice(删除的索引&#xff0c;删除的元素个数)this.list.splice(index, 1);},add: function () {//包装成list要求的对象var tem &#61; {id: this.id,name: this.name,time: new Date().toLocaleString()};//将tem追加到list数组中this.list.push(tem);//清空页面上的文本框中的数据this.id &#61; "";this.name &#61; "";}}})script>body>
5、格式化时间&#xff0c;使用过滤器
DOCTYPE html>
<html><head><meta charset&#61;"UTF-8"><title>title><script src&#61;"https://cdn.jsdelivr.net/npm/vue">script><style>.box {width: 900px;height: auto;overflow: hidden;margin: 30px auto;}.left {height: 150px;width: 185px;padding: 5px;display: inline-block;border: 1px solid black;}.left input {padding: 2px;margin-top: 10px;}.right {width: 600px;height: auto;display: inline-block;margin-left: 30px;vertical-align: top;}.right table {border-collapse: collapse;width: 580px;}.right table th {background-color: green;padding: 5px;text-align: center;border: 1px solid black;color: #FFFFFF;}.right table tr {text-align: center;}.right table td {border: 1px solid black;}style>head><body><div id&#61;"app"><div class&#61;"box"><div class&#61;"left"><input type&#61;"text" placeholder&#61;"输入编号" v-model&#61;"id" /><input type&#61;"text" placeholder&#61;"输入名称" v-model&#61;"name" /><br /><input type&#61;"button" value&#61;"添加数据" &#64;click&#61;"add" />div><div class&#61;"right"><table><tr><th>编号th><th>品牌名称th><th>创建时间th><th>操作th>tr><tr v-for&#61;"item in list"><td>{{item.id}}td><td>{{item.name}}td><td>{{item.time | datefmt(&#39;yyyy-mm-dd HH:mm:ss&#39;)}}td><td><a href&#61;"Javascript:void(0)" &#64;click&#61;"del(item.id)">删除a>td>tr>table>div>div>div><script>//定义全局过滤器
Vue.filter("datefmt", function (input, formatstring) {var result &#61; "";var year &#61; input.getFullYear();var month &#61; input.getMonth() &#43; 1;var day &#61; input.getDate();var hour &#61; input.getHours();hour &#61; hour < 10 ? "0" &#43; hour : hour;var minute &#61; input.getMinutes();minute &#61; minute < 10 ? "0" &#43; minute : minute;if (formatstring &#61;&#61; &#39;yyyy-mm-dd&#39;) {result &#61; year &#43; "-" &#43; month &#43; "-" &#43; day;} else {result &#61; year &#43; "-" &#43; month &#43; "-" &#43; day &#43; " " &#43; hour &#43; ":" &#43; minute;}return result;})var vm &#61; new Vue({el: &#39;#app&#39;,data: {id: &#39;&#39;,name: &#39;&#39;,list: [{"id": 1,"name": "宝马","time": new Date()},{"id": 2,"name": "奔驰","time": new Date()}]},methods: {del: function (id) {if (!confirm("是否删除数据&#xff1f;")) {return;}//调用list.findIndex()方法&#xff0c;根据传入的id获取到这个要删除数据的索引值var index &#61; this.list.findIndex(function (item) {return item.id &#61;&#61; id;});//调用list.splice(删除的索引&#xff0c;删除的元素个数)this.list.splice(index, 1);},add: function () {//包装成list要求的对象var tem &#61; {id: this.id,name: this.name,time: new Date()};//将tem追加到list数组中this.list.push(tem);//清空页面上的文本框中的数据this.id &#61; "";this.name &#61; "";}}})script>body>
html>
至此&#xff0c;一个关于Vue的小案例开发就成功开发了&#xff0c;是不是非常的简单&#xff1f;
6、增加搜索数据功能
DOCTYPE html>
<html><head><meta charset&#61;"UTF-8"><title>title><script src&#61;"https://cdn.jsdelivr.net/npm/vue">script><style>.box {width: 900px;height: auto;overflow: hidden;margin: 30px auto;}.left {height: 150px;width: 185px;padding: 5px;display: inline-block;border: 1px solid black;}.left input {padding: 2px;margin-top: 10px;}.right {width: 600px;height: auto;display: inline-block;margin-left: 30px;vertical-align: top;}.right table {border-collapse: collapse;width: 580px;}.right table th {background-color: green;padding: 5px;text-align: center;border: 1px solid black;color: #FFFFFF;}.right table tr {text-align: center;}.right table td {border: 1px solid black;}style>head><body><div id&#61;"app"><div class&#61;"box"><div class&#61;"left"><input type&#61;"text" placeholder&#61;"输入编号" v-model&#61;"id" /><input type&#61;"text" placeholder&#61;"输入名称" v-model&#61;"name" /><br /><input type&#61;"button" value&#61;"添加数据" &#64;click&#61;"add" /><input type&#61;"text" placeholder&#61;"搜索数据" v-model&#61;"search" />div><div class&#61;"right"><table><tr><th>编号th><th>品牌名称th><th>创建时间th><th>操作th>tr><tr v-for&#61;"item in searchData"><td>{{item.id}}td><td>{{item.name}}td><td>{{item.time | datefmt(&#39;yyyy-mm-dd HH:mm:ss&#39;)}}td><td><a href&#61;"Javascript:void(0)" &#64;click&#61;"del(item.id)">删除a>td>tr>table>div>div>div><script>//定义全局过滤器
Vue.filter("datefmt", function (input, formatstring) {var result &#61; "";var year &#61; input.getFullYear();var month &#61; input.getMonth() &#43; 1;var day &#61; input.getDate();var hour &#61; input.getHours();hour &#61; hour < 10 ? "0" &#43; hour : hour;var minute &#61; input.getMinutes();minute &#61; minute < 10 ? "0" &#43; minute : minute;if (formatstring &#61;&#61; &#39;yyyy-mm-dd&#39;) {result &#61; year &#43; "-" &#43; month &#43; "-" &#43; day;} else {result &#61; year &#43; "-" &#43; month &#43; "-" &#43; day &#43; " " &#43; hour &#43; ":" &#43; minute;}return result;})var vm &#61; new Vue({el: &#39;#app&#39;,data: {id: &#39;&#39;,name: &#39;&#39;,search: &#39;&#39;,list: [{"id": 1,"name": "宝马","time": new Date()},{"id": 2,"name": "奔驰","time": new Date()}]},methods: {del: function (id) {if (!confirm("是否删除数据&#xff1f;")) {return;}//调用list.findIndex()方法&#xff0c;根据传入的id获取到这个要删除数据的索引值var index &#61; this.list.findIndex(function (item) {return item.id &#61;&#61; id;});//调用list.splice(删除的索引&#xff0c;删除的元素个数)this.list.splice(index, 1);},add: function () {//包装成list要求的对象var tem &#61; {id: this.id,name: this.name,time: new Date()};//将tem追加到list数组中this.list.push(tem);//清空页面上的文本框中的数据this.id &#61; "";this.name &#61; "";}},computed: {searchData: function () {var search &#61; this.search;if (search) {return this.list.filter(function (name) {return Object.keys(name).some(function (key) {return String(name[key]).toLowerCase().indexOf(search) > -1})})}return this.list;}}})script>body>
html>