You can conditionally add classes to Vue.js templates using v-bind:class. This will help display the status of a todo as you add a Vuex action to patch todos. This lesson walks you through setting up a toggle button that triggers a toggle action to patch todos in Vuex.

<template>
<div>
<form @submit.prevent="add(task)">
<input v-model="task" type="text" />
<input type="submit" value="ADD">
</form>
<article class="pa3 pa5-ns">
<ul class="list pl0 ml0 center mw6 ba b--light-silver br2">
<li v-for="todo of todos" class="flex items-center ph3 pv3 bb b--light-silver">
<span v-bind:class="{strike: todo.complete}" class="flex-auto">{{todo.id}} {{todo.task}}</span>
<button @click="toggle(todo)"><img src="https://icon.now.sh/check" alt="toggle"></button>
<button @click="remove(todo)"><img src="https://icon.now.sh/trash" alt="delete"></button>
</li>
</ul>
</article>
</div>
</template> <script>
import { mapState, mapActions } from 'vuex'
import {init} from './shared' export default {
fetch: init,
computed: {
...mapState({
todos: (state) => state.todos
})
},
data () {
return {
task: 'Some data'
}
},
methods: {
...mapActions([
'add',
'remove',
'toggle'
])
}
}
</script>

store/index.js:

import Vuex from 'vuex'
import axios from 'axios' const store = () => new Vuex.Store({
state: {
todos: [
]
},
mutations: {
init (state, todos) {
state.todos = todos
},
add (state, todo) {
state.todos = [
...state.todos,
todo
]
},
remove (state, todo) {
state.todos = state.todos.filter((t) => {
return t.id !== todo.id
})
},
toggle (state, todo) {
state.todos = state.todos.map(t => {
return t.id === todo.id
? todo
: t
})
}
},
actions: {
async add (context, task) {
const commit = context.commit
const res = await axios.post('https://todos-cuvsmolowg.now.sh/todos', {
task,
complete: false
})
commit('add', res.data)
},
async remove ({commit}, todo) {
await axios.delete(`https://todos-cuvsmolowg.now.sh/todos/${todo.id}`)
commit('remove', todo)
},
async toggle ({commit}, todo) {
const res = await axios.patch(`https://todos-cuvsmolowg.now.sh/todos/${todo.id}`, {complete: !todo.complete})
commit('toggle', res.data)
}
}
}) export default store

最新文章

  1. 用extract-text-webpack-plugin提取出来的css文件中背景图片url的不正确的问题
  2. gnuplot安装的小问题
  3. JavaScript-BOM-history:保存当前窗口打开后成功访问过的url历史记录栈
  4. 11. 求奇数分之一序列前N项和
  5. 给ubuntu系统换新装
  6. 基于SOCK4网络协议的代理服务器端代码示例
  7. 如何自定义一个优雅的ContentProvider
  8. js遍历集合
  9. MapReduce工作原理图文详解 (炼数成金)
  10. mysql 导出,导入数据
  11. 2017年最新15个漂亮的 HTML 摄影网站模板
  12. telnet配置和telnet用法
  13. Python内置函数(20)——hex
  14. SDL2源代码分析2:窗口(SDL_Window)
  15. 关于ip通信学习感想
  16. 【css】正确的让文本换行
  17. 初识ActiveMQ
  18. 解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题
  19. 『Python』VS2015编译源码注意事项
  20. Elasticsearch集成HanLP分词器

热门文章

  1. jdbc的数据库驱动类DriverManager.getConnection()详解
  2. Java(标识符,关键字,注释,常量,变量)
  3. Flask的快速入门详细笔记
  4. 【Educational Codeforces Round 36 B】Browser
  5. HUD——T 3836 Equivalent Sets
  6. Spring源码分析专题——目录
  7. 11. Linux——LCD驱动程序
  8. [Node.js] Serve Static Files with Express
  9. matlab 可视化 —— 高级 api(montage)、insertObjectAnnotation、insertMaker
  10. wampserver安装后访问localhost出现 Forbidden问题