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 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 11 Javascript
走出JavaScript初学困境—js初学
Dec 29 Javascript
JS getStyle获取最终样式函数代码
Apr 01 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
Dec 04 Javascript
jQuery性能优化的38个建议
Mar 04 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
Jul 30 Javascript
浅析jquery unbind()方法移除元素绑定的事件
May 24 Javascript
JS 清除字符串数组中,重复元素的实现方法
May 24 Javascript
详解webpack分离css单独打包
Jun 21 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
Mar 03 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
Apr 17 Javascript
原生js实现五子棋游戏
May 28 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&amp;java(二)
2006/10/09 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
cookie中的path与domain属性详解
2013/12/18 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
python绘制多个曲线的折线图
2020/03/23 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Python八皇后问题解答过程详解
2019/07/29 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
python脚本后台执行方式
2019/12/21 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
送给他或她的礼物:FUN.com
2018/08/17 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
高中国旗下的演讲稿
2014/08/28 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
庆七一主持词
2015/06/29 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
如何在Python项目中引入日志
2021/05/31 Python
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
手把手教你实现PyTorch的MNIST数据集
2021/06/28 Python
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS