使用Vue完成一个简单的todolist的方法


Posted in Javascript onDecember 01, 2017

看了两天的Vue,还是上手写一个简单的todolist更实用(文末有彩蛋)。

一、使用vue-cli脚手架快速搭建一个框架

利用vue-cli来自动生成我们项目的前端目录及文件,方法:

npm install -g vue-cli
vue init webpack my-project
cd my-project
npm install
npm run dev

这样我们的一个基于webpack的vue项目目录就可以快速构建好了。

目录如下:

使用Vue完成一个简单的todolist的方法

二、完成一个简单的todolist

接下来就看一下webpack.base.conf文件,这是核心文件,必须执行的文件,这里可以看到entry和output,这就是入口和输出路径,在入口处看到了./src/main.js,这就找到了界面的入口处了。在main.js中可以看到创建了一个vue实例,并加载了模板组件App.vue,所以我们的todo list代码就可以写在App.vue中。

简单的todolist我们可以完成这几个功能:

1、显示todo列表

2、判断列表任务完成状态,若完成则添加相应的样式

3、在输入框中动态添加todo项目,点击回车在列表中显示

4、点击相应的项目转换状态

首先我们完成显示列表的功能:

<template>
 <div id="app">
  <input/>
  <ul>
   <li v-for="item in items">
    {{item.label}}
   </li>
  </ul>
 </div>
</template>

<script>
 export default {
  data () {
   return {
    items: [
     {
      label: 'read books',
      isFinished: false
     },
     {
      label: 'eat dinner',
      isFinished: true
     }
    ]
   }
  }
 }
</script>

使用Vue完成一个简单的todolist的方法

效果

export后面跟的对象,会作为 new Vue()的参数,来创建一个Vue的组件,并导出。

判断任务的完成状态,完成则添加text-decoration样式

官方文档中我们可以看到:

使用Vue完成一个简单的todolist的方法

绑定class样式

如果v-bind中class后是一个对象的话,键代表添加的class的名称,value值代表一个布尔值,用来控制这个class属性的有无。
所以我们就可以这样:

<template>
 <div id="app">
  <input/>
  <ul>
   <li v-for="item in items" v-bind:class={finished:item.isFinished}>
    {{item.label}}
   </li>
  </ul>
 </div>
</template>

<script>
 export default {
  data () {
   return {
    items: [
     {
      label: 'read books',
      isFinished: false
     },
     {
      label: 'eat dinner',
      isFinished: true
     }
    ]
   }
  }
 }
</script>

<style>
 .finished {
  text-decoration: line-through;
 }
</style>

效果

使用Vue完成一个简单的todolist的方法

在输入框中填写item,点击回车完成添加列表并显示同时清空input框内容

用到的知识:

使用Vue完成一个简单的todolist的方法

监听回车

使用Vue完成一个简单的todolist的方法

表单控件监听

<template>
 <div id="app">
  <input v-on:keyup.enter="addNewItem" v-model="newItem"/>
  <ul>
   <li v-for="item in items" v-bind:class={finished:item.isFinished}>
    {{item.label}}
   </li>
  </ul>
 </div>
</template>

<script>
 export default {
  data () {
   return {
    items: [
     {
      label: 'read books',
      isFinished: false
     },
     {
      label: 'eat dinner',
      isFinished: true
     }
    ],
    newItem: ''
   }
  },
  methods: {
   addNewItem () {
    this.items.push({label: this.newItem,isFinished: false})
    this.newItem = ''  //清空输入框
   } 
  }
 }
</script>

<style>
 .finished {
  text-decoration: line-through;
 }
</style>

点击内容进行状态转换

在li标签上绑定一个click事件,点击时修改isFinished

//添加代码
 <li v-for="item in items" v-bind:class={finished:item.isFinished} v-on:click="finish(item)">
    {{item.label}}
 </li>

methods: {
 finish (item) {
    item.isFinished = !item.isFinished
  }
}

这样一个简单的todolist的基本功能已经完成。

使用Vue完成一个简单的todolist的方法

动图效果

小彩蛋:linux下制作GIF动图

上网查找了很多办法,很多不适合linux平台,发现这个办法不错:

下载SimpleScreenRecoder软件:

三条命令:

sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder
sudo apt-get update
sudo apt-get install simplescreenrecorder

安装好后你可以选择录制区域

使用Vue完成一个简单的todolist的方法

参考资料:

Vue官方API文档:https://cn.vuejs.org/v2/api/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js不能跳转到上一页面的问题解决方法
Mar 01 Javascript
查找iframe里元素的方法可传参
Sep 11 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
easyui Draggable组件实现拖动效果
Aug 19 Javascript
jQuery实现的右下角广告窗体跟随效果示例
Sep 16 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
详解Vue 非父子组件通信方法(非Vuex)
May 24 Javascript
详解node nvm进行node多版本管理
Oct 21 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
Sep 23 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
Sep 26 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
Oct 30 Javascript
原生JS实现天气预报
Jun 16 Javascript
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 #jQuery
如何让你的JS代码更好看易读
Dec 01 #Javascript
javascript中new Array()和var arr=[]用法区别
Dec 01 #Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
Dec 01 #Javascript
利用JS测试目标网站的打开响应速度
Dec 01 #Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 #Javascript
javascript按顺序加载运行js方法
Dec 01 #Javascript
You might like
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
计算机操作自荐信
2013/12/07 职场文书
眼镜促销方案
2014/03/15 职场文书
档案信息化建设方案
2014/05/16 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
解决 redis 无法远程连接
2022/05/15 Redis