1. 程式人生 > >Vue初體驗——用Vue實現簡易版TodoList

Vue初體驗——用Vue實現簡易版TodoList

一個 link this clas 教程 show success gen strong

最近在學習Vue,斷斷續續看完了官方教程的基礎部分,想練一下手熟悉一下基本用法,做了一個簡易版的TodoList

效果:

技術分享

技術分享

技術分享

代碼:

HTML:

 1 <!DOCTYPE html>
 2 <html>
 3 
 4 <head>
 5     <title>TodoList</title>
 6     <meta charset="utf-8">
 7     <!-- 為了讓 Bootstrap 開發的網站對移動設備友好,確保適當的繪制和觸屏縮放 -->
 8     <meta name
="viewport" content="width=device-width, initial-scale=1.0"> 9 <!-- 引入 Bootstrap --> 10 <link href="css/lib/bootstrap.css" rel="stylesheet"> 11 <link href="css/todo.css" rel="stylesheet"> 12 13 </head> 14 15 <body> 16 <div class="container"> 17 <
div id="todo"> 18 <h1>To do list</h1> 19 <div class="add-box"> 20 <form class="add-form"> 21 <div class="form-group"> 22 <span class="required">*</span> 23 <
label for="nm">名稱:</label> 24 <input id="nm" v-model="newItem.name" size="20"> 25 </div> 26 <div class="form-group"> 27 <span class="hiddenStar">*</span> 28 <label for="desc">描述:</label> 29 <input id="desc" v-model="newItem.describtion"> 30 </div> 31 <div class="form-group"> 32 <span class="required">*</span> 33 <label>緊急程度:</label> 34 <label for="high"><input type="radio" id="high" name="importance" value="高" v-model="newItem.importance"></label> &nbsp;&nbsp; 35 <label for="middle"><input type="radio" id="middle" name="importance" value="中" v-model="newItem.importance"></label> &nbsp;&nbsp; 36 <label for="low"><input type="radio" id="low" name="importance" value="低" v-model="newItem.importance"></label> 37 </div> 38 </form> 39 <button class="add-btn btn-info" @click="addNew(newItem)">添加</button> 40 </div> 41 <div class="display-box"> 42 <table class="table table-bordered"> 43 <colgroup> 44 <col style="width:20%"> 45 <col style="width:30"> 46 <col style="width:15%"> 47 <col style="width:15%"> 48 <col style="width:20%"> 49 </colgroup> 50 <thead> 51 <tr> 52 <th>名稱</th> 53 <th>描述</th> 54 <th>緊急程度</th> 55 <th>狀態</th> 56 <th>操作</th> 57 </tr> 58 </thead> 59 <tbody> 60 <tr v-for="item in items" :class="item[‘class‘]"> 61 <td>{{item.name}}</td> 62 <td>{{item.describtion}}</td> 63 <td>{{item.importance}}</td> 64 <td>{{item.status}}</td> 65 <td> 66 <button v-if="item[‘btnShow‘]" class="btn btn-success" @click="changeStatus">完成</button> 67 <button v-if="!item[‘btnShow‘]" class="btn btn-default" @click="changeStatus">重置</button> 68 <button class="btn btn-danger" @click="changeStatus">刪除</button> 69 </td> 70 </tr> 71 </tbody> 72 </table> 73 </div> 74 </div> 75 </div> 76 77 <!-- jQuery (Bootstrap 的 JavaScript 插件需要在bootstrap.js之前引入 jQuery) --> 78 <script src="js/lib/jquery.js"></script> 79 <!-- 包括所有已編譯的插件 --> 80 <script src="js/lib/bootstrap.js"></script> 81 <script src="js/lib/vue.js"></script> 82 <script src="js/todo.js"></script> 83 </body> 84 85 </html>

CSS:

 1 html,
 2 body,
 3 ul,
 4 li,
 5 ol,
 6 dl,
 7 dd,
 8 dt,
 9 p,
10 h1,
11 h2,
12 h3,
13 h4,
14 h5,
15 h6,
16 form,
17 fieldset,
18 legend,
19 img {
20     margin: 0;
21     padding: 0
22 }
23 
24 body {
25     font-family: Arial, Helvetica, sans-serif;
26     font-size: 16px;
27     width: 100%;
28     background-color: skyblue;
29     color: #3B3B3B;
30 }
31 
32 .container {
33     max-width: 70%;
34     min-width: 600px;
35     overflow-x: auto;
36     margin: 50px auto;
37     text-align: center;
38 }
39 
40 h1 {
41     font-family: ‘華文彩雲‘;
42     font-weight: 700;
43     font-size: 60px;
44     color: white;
45 }
46 
47 .add-box {
48     display: inline-block;
49     margin: 40px auto;
50 }
51 
52 .add-form {
53     text-align: left;
54 }
55 
56 .add-form input {
57     font-size: 14px;
58     padding: 2px 5px;
59 }
60 
61 .add-btn {
62     display: block;
63     width: 100px;
64     margin: 0 auto;
65     line-height: 2;
66     border-radius: 5px;
67 }
68 
69 .display-box {
70     margin-top: 40px;
71 }
72 
73 .table th,
74 .table td {
75     text-align: center;
76 }
77 
78 .table button {
79     display: inline-block;
80     width: 40%;
81     max-width: 65px;
82     padding: 2px 5px;
83     margin: -2px auto auto 5px;
84     font-size: 14px;
85     border-radius: 5px;
86 }
87 
88 .done {
89     background-color: #CFCFCF;
90 }
91 
92 .required {
93     color: red;
94 }
95 
96 .hiddenStar {
97     visibility: hidden;
98 }

JS:

 1 var todo = new Vue({
 2     el: ‘#todo‘,
 3     data: {
 4         newItem: {
 5             name: ‘‘,
 6             describtion: ‘‘,
 7             importance: ‘‘,
 8         },
 9         items: JSON.parse(window.localStorage.getItem(‘list‘)) || []
10     },
11     methods: {
12         addNew: function(item) {
13             if (item.name && item.importance) {
14                 item.status = ‘待辦‘;
15                 item["btnShow"] = true;
16                 item.class = ‘‘;
17                 var obj = {};
18                 for (let pro in item) {
19                     obj[pro] = item[pro];
20                     item[pro] = ‘‘;
21                 }
22                 this.items.push(obj);
23             } else {}
24         },
25         changeStatus: function(event) {
26             let btn = event.target;
27             let whichBtn = btn.innerText;
28             let whichLine = btn.parentNode.parentNode;
29             let index = whichLine.rowIndex;
30             let currentItem = this.items[index - 1];
31 
32             switch (whichBtn) {
33                 case ‘完成‘:
34                     currentItem[‘btnShow‘] = false;
35                     currentItem.status = ‘完成‘;
36                     currentItem.class = ‘done‘;
37                     break;
38                 case ‘重置‘:
39                     currentItem[‘btnShow‘] = true;
40                     currentItem.status = ‘待辦‘;
41                     currentItem.class = ‘‘;
42                     break;
43                 case ‘刪除‘:
44                     this.items.shift(currentItem);
45             }
46         },
47     },
48     watch: {
49         items: {
50             handler: function() {
51                 let jsonStr = JSON.stringify(this.items);
52                 window.localStorage.setItem(‘list‘, jsonStr);
53             },
54             deep: true,
55         }
56     },
57 });

Vue初體驗——用Vue實現簡易版TodoList