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 相关文章推荐
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
Apr 20 Javascript
ext 列表页面关于多行查询的办法
Mar 25 Javascript
XENON基于JSON变种
Jul 27 Javascript
javascript使用activex控件的代码
Jan 27 Javascript
AJAX跨域请求json数据的实现方法
Nov 11 Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 Javascript
JS显示下拉列表框内全部元素的方法
Mar 31 Javascript
jquery带动画效果幻灯片特效代码
Aug 27 Javascript
在Vue中如何使用Cookie操作实例
Jul 27 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
Oct 19 Javascript
8个非常实用的Vue自定义指令
Dec 15 Vue.js
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
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执行速度全攻略(下)
2006/10/09 PHP
在字符串中把网址改成超级链接
2006/10/09 PHP
PHP 选项及相关信息函数库
2006/12/04 PHP
phpwind中的数据库操作类
2007/01/02 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
js function使用心得
2010/05/10 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
javascript arguments使用示例
2014/12/16 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
小程序实现密码输入框
2020/11/16 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
在python中使用nohup命令说明
2020/04/16 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
应用化学专业本科生求职信
2013/09/29 职场文书
物流管理应届生求职信
2013/11/07 职场文书
前台文员的岗位职责
2013/11/14 职场文书
小学音乐教学反思
2014/02/05 职场文书
大学生社会实践评语
2014/04/25 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
个人自我剖析材料
2014/09/30 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
导游词之青岛崂山
2019/12/27 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python