Home > Article > Web Front-end > Implement todolist through two technologies: vue + vuex (detailed tutorial)
This article mainly introduces the implementation example code of vue vuex todolist. I think it is quite good. Now I will share it with you and give it as a reference.
todolist demo
I recently took a look at vuex again when I had time, and then wrote a small todolist demo. The principle is relatively simple, mainly because I have standardized it myself. Here’s how to write the code.
Download address: vue-test_jb51.rar
Rendering
Root component
<template> <p 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' /> </p> </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>
Filter condition component
<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>
Add to-do Component
<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>
Single To-Do Component
<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 part (module)
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 }
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
JQuery Implementation of Enter Trigger Button Event Function Example
jQuery Cookie Implementation of Switching Skin Function
Sample code for interactions between Angular components
##
The above is the detailed content of Implement todolist through two technologies: vue + vuex (detailed tutorial). For more information, please follow other related articles on the PHP Chinese website!