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 相关文章推荐
js 单引号 传递方法
Jun 22 Javascript
按钮JS复制文本框和表格的代码
Apr 01 Javascript
javascript 获取iframe里页面中元素值的方法
Feb 17 Javascript
单击和双击事件的冲突处理示例代码
Apr 03 Javascript
推荐9款炫酷的基于jquery的页面特效
Dec 07 Javascript
Vue.js常用指令之循环使用v-for指令教程
Jun 27 Javascript
使用node.js对音视频文件加密的实例代码
Aug 30 Javascript
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 Javascript
Vue项目history模式下微信分享爬坑总结
Mar 29 Javascript
layui扩展上传组件模拟进度条的方法
Sep 23 Javascript
JS 基本概念详细介绍
Oct 16 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php正则表达式(regar expression)
2011/09/10 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
Linux中为php配置伪静态
2014/12/17 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
Python GAE、Django导出Excel的方法
2008/11/24 Python
Python二分法搜索算法实例分析
2015/05/11 Python
python数据结构之链表详解
2017/09/12 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Python画图高斯分布的示例
2019/07/10 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
10张动图学会python循环与递归问题
2021/02/06 Python
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
百度吧主申请感言
2014/01/12 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
付款证明模板
2015/06/19 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技