vue + vuex todolist的实现示例代码


Posted in Javascript onMarch 09, 2018

todolist demo

最近有空重新看了一下vuex,然后又写了一个todolist小demo,原理比较简单,主要是自己规范了一下代码的写法.

下载地址 :vue-test_3water.rar

效果图

vue + vuex todolist的实现示例代码

根组件

<template>
 <div class='container'>
 <h1 class='title'>todo list demo</h1>
 <type-filter
 :types='types'
 :filter='filter'
 :handleUpdateFilter='handleUpdateFilter'
 />
 <add-todo :handleAdd='handleAdd' />
 <todo-item
 v-for='(item,index) in list'
 :key='item.id'
 :index='index'
 :data='item'
 :filter='filter'
 :handleRemove='handleRemove'
 :handleToggle='handleToggle'
 />
 </div>
</template>

<script>
import { createNamespacedHelpers } from 'vuex'
import TypeFilter from './filter'
import AddTodo from './addTodo'
import TodoItem from './item'

const { mapState, mapMutations } = createNamespacedHelpers('TodoList')
export default {
 name: 'todo-list-demo',
 components: { TypeFilter, TodoItem, AddTodo },
 computed: {
 ...mapState(['list', 'types', 'filter'])
 },
 methods: {
 ...mapMutations([
 'handleAdd',
 'handleRemove',
 'handleToggle',
 'handleUpdateFilter'
 ])
 }
}
</script>

<style lang='scss' scoped>
@import './style.scss';
</style>

过滤条件组件

<template>
 <ul class='types'>
 <li
 v-for='(item,index) in types'
 :key='index + item'
 :class='filterClass(item)'
 @click='handleUpdateFilter(item)'
 >{{item}}</li>
 </ul>
</template>

<script>
export default {
 name: 'type-filter',
 props: ['types', 'filter', 'handleUpdateFilter'],
 methods: {
 filterClass(filter) {
 return { filter: true, active: filter === this.filter }
 }
 }
}
</script>

<style lang='scss' scoped>
@import './style.scss';
</style>

添加待办组件

<template>
 <input
 type='text'
 name='add-todo'
 id='add-todo-input'
 class='add-todo'
 @keyup.enter='add'
 placeholder='input then hit enter'
 />
</template>

<script>
export default {
 name: 'add-todo',
 props: ['handleAdd'],
 methods: {
 add(e) {
 const val = e.target.value.trim()
 if (val) {
 this.handleAdd({
  id: new Date().getTime(),
  message: val,
  status: false
 })
 e.target.value = ''
 }
 }
 }
}
</script>

<style lang='scss' scoped>
@import './style.scss';
</style>

单个待办事项组件

<template>
 <p v-if='show' class='todo-item'>
 <span
 :class='messageClass(data.status)'
 @click='handleToggle(data.id)'
 >{{index+1}}. {{data.message}}<i class='date'>{{dateFormat(data.id)}}</i></span>
 <span
 class='delete'
 @click='handleRemove(data.id)'
 >Delete</span>
 </p>
</template>

<script>
export default {
 name: 'todo-items',
 props: ['data', 'filter', 'index', 'handleRemove', 'handleToggle'],
 computed: {
 show() {
 return (
 this.filter === 'ALL' ||
 (this.filter === 'UNDO' && !this.data.status) ||
 (this.filter === 'DONE' && this.data.status)
 )
 }
 },
 methods: {
 dateFormat(time) {
 const date = new Date(time)
 return `(${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()})`
 },
 messageClass: status => ({ message: true, done: status })
 }
}
</script>

<style lang='scss' scoped>
@import './style.scss';
</style>

vuex部分(模块)

const state = {
 list: [],
 types: ['ALL', 'UNDO', 'DONE'],
 filter: 'ALL'
}
const mutations = {
 handleAdd(state, item) {
 state.list = [...state.list, item]
 },
 handleRemove(state, id) {
 state.list = state.list.filter(obj => obj.id !== id)
 },
 handleToggle(state, id) {
 state.list = state.list.map(
 obj => (obj.id === id ? { ...obj, status: !obj.status } : obj)
 )
 },
 handleUpdateFilter(state, filter) {
 state.filter = filter
 }
}
export default {
 namespaced: true,
 state,
 mutations
}

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

Javascript 相关文章推荐
基于JQuery的6个Tab选项卡插件
Sep 03 Javascript
html dom节点操作(获取/修改/添加或删除)
Jan 23 Javascript
js propertychange和oninput事件
Sep 28 Javascript
jquery原理以及学习技巧介绍
Nov 11 Javascript
AngularJS入门教程引导程序
Aug 18 Javascript
jQuery模拟淘宝购物车功能
Feb 27 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
Jun 12 jQuery
jquery.validate表单验证插件使用详解
Jun 21 jQuery
vue.js全局API之nextTick全面解析
Jul 07 Javascript
Vue官方文档梳理之全局配置
Nov 22 Javascript
前端MVVM框架解析之双向绑定
Jan 24 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
May 10 Javascript
vue实现在表格里,取每行的id的方法
Mar 09 #Javascript
vue移动端UI框架实现QQ侧边菜单组件
Mar 09 #Javascript
vue的安装及element组件的安装方法
Mar 09 #Javascript
11行JS代码制作二维码生成功能
Mar 09 #Javascript
浅谈vue.js导入css库(elementUi)的方法
Mar 09 #Javascript
使用use注册Vue全局组件和全局指令的方法
Mar 08 #Javascript
vue注册组件的几种方式总结
Mar 08 #Javascript
You might like
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
jquery tools之tooltip
2009/07/25 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
Python实现的爬虫功能代码
2017/06/24 Python
用Python实现KNN分类算法
2017/12/22 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
Pycharm修改python路径过程图解
2020/05/22 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
最新英语专业学生求职信范文
2013/09/21 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
校园活动宣传方案
2014/03/28 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
慈善晚会策划方案
2014/05/14 职场文书
驻村工作先进事迹
2014/08/14 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
优质护理心得体会
2016/01/22 职场文书