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 相关文章推荐
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
js浮动图片的动态效果
Jul 10 Javascript
js style动态设置table高度
Oct 21 Javascript
jQuery统计指定子元素数量的方法
Mar 17 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
Sep 05 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
javascript实现获取图片大小及图片等比缩放的方法
Nov 24 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
Jul 21 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
Jun 03 Javascript
微信小程序开发中var that =this的用法详解
Jan 18 Javascript
在VUE style中使用data中的变量的方法
Jun 19 Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 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
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
为你总结一些php信息函数
2015/10/21 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
python自动格式化json文件的方法
2015/03/11 Python
Python的randrange()方法使用教程
2015/05/15 Python
python 换位密码算法的实例详解
2017/07/19 Python
Python实现ping指定IP的示例
2018/06/04 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
html5 标签
2009/07/16 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
年终总结会议主持词
2014/03/17 职场文书
父亲去世追悼词
2015/06/23 职场文书
公司会议开幕词
2016/03/03 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang