Vue初体验——用Vue实现简易版TodoList

最近在学习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 });
时间: 2024-10-07 17:12:57

Vue初体验——用Vue实现简易版TodoList的相关文章

Vue初体验

参考地址:https://cn.vuejs.org/v2/guide/installation.html Vue.js 是一套构建用户界面的渐进式框架,不支持IE8及其以下版本的浏览器,因为其使用IE8不能模拟的ECMAScript5特性,Vue.js支持所有 兼容ECMAScript5的浏览器. 1. 使用 1.1 一般情况下是使用<script>中引用Vue.js. <!DOCTYPE html> <html lang="en"> <hea

vue初体验:实现一个增删查改成绩单

前端变化层出不穷,去年NG火一片,今年react,vue火一片,ng硬着头皮看了几套教程,总被其中的概念绕晕,react是faceback出品,正在不断学习中,同时抽时间了解了vue,查看了vue官方文挡,看完格外入眼,总觉得要拿来试一试手. 正好周未,做一个小成绩单玩玩,以前有用avalon也做过一个类似的:http://www.cnblogs.com/xwwin/p/5203334.html 从过程来看,二个框架都在避免开发者频繁操作dom,脱离dom苦海,安心处理数据业务逻辑,从二个示例来

vue初学之node.js安装、cnpm安装、vue初体验

1. 如果本机没有安装node运行环境,请下载node 安装包进行安装.地址:https://nodejs.org/en/ 2.装完,使用cmd命令行输入:node -v回车 如果输出版本号则成功. 3.输入npm -v回车可查看npm的版本号 4.因为npm是国外的服务器,所以使用的时候响应很慢,可以安装国内的淘宝镜像. 在终端输入:npm install -g cnpm --registry=https://registry.npm.taobao.org回车 等待挺长一段时间,安装成功后即可

vue.js 初体验

Vue.js是什么? 一个构建数据驱动的web界面的库.他不是一个全能框架,技术上重点集中在MVVM中的ViewModel层. Vue.js特点? 轻巧.高性能.可组件化 官网地址:http://cn.vuejs.org/ Vue.js初体验 引入Vue.js独立版本, 至官网下载独立版本.根据提示,开发时选择开发版本. 直接引入Vue.js到静态页面中,从数据绑定开始编写DOM部分和js部分 <div id="app"> {{message}} </div>

【腾讯Bugly干货分享】基于 Webpack &amp; Vue &amp; Vue-Router 的 SPA 初体验

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于戏台一般精彩纷呈,从 MVC 到 MVVM,你刚唱罢我登场. backbone,angularjs 已成昨日黄花,reactjs 如日中天,同时另一更轻量的 vue 发展势头更猛,尤其是即将 release 的2.0版本,号称兼具了 angularjs 和 reactjs 的两者优点.不过现在的官方

firefox os 2.0版模拟器上QQ初体验

对于firefox os 爱好者而言,firefox os 手机迟迟没在中国上市会感到些许遗憾,但我们要相信firefox os 登陆中国是迟早的事,腾讯QQ已经登陆firefox os 应用市场,今天我们就从模拟器上感受一番腾讯QQ,想体验的爱好者们可以参考安装模拟器抢先体验一番! 下载安装QQ 安装. 安装完成 登陆界面; 聊天界面 喜欢的盆友快去试试吧!!!   编辑(5狐网)firefox os 2.0版模拟器上QQ初体验,布布扣,bubuko.com

Django初体验——搭建简易blog

前几天在网上看到了篇采用Django搭建简易博客的视频,好奇心驱使也就点进去学了下,毕竟自己对于Django是无比敬畏的,并不是很了解,来次初体验. 本文的操作环境:ubuntu.python2.7.Django1.8.6.Pycharm5.其实自从使用了ubuntu之后就很神奇的喜欢上了它,真的用起来方便很多. 1.Django项目文件并创建blog应用 (1)可以在终端中建立Django项目,使用django-admin startproject ...直接上图: 建立blog应用: (2)

Python 3.8.0 正式版发布,新特性初体验 全面介绍

Python 3.8.0 正式版发布,新特性初体验 北京时间 10 月 15 日,Python 官方发布了 3.8.0 正式版,该版本较 3.7 版本再次带来了多个非常实用的新特性. 赋值表达式 PEP 572: Assignment Expressions 新增一种新语法形式::=,又称为"海象运算符"(为什么叫海象,看看这两个符号像不像颜表情),如果你用过 Go 语言,应该对这个语法非常熟悉. 具体作用我们直接用实例来展示,比如在使用正则匹配时,以往版本中我们会如下写: impor

XXL-JOB初体验-ORACLE版(转)

XXL-JOB初体验-ORACLE版 除了文章中提到的要修改的地方,增加以下修改: 1.添加Oracle.jdbc驱动 <!--需要自建,mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar -Dfile=ojdbc8.jar --> <dependency> <groupId>com.oracle</groupId&