[Nuxt] Update State with Vuex Actions in Nuxt.js
2017-07-25 21:16
791 查看
You can conditionally add classes to Vue.js templates using
store/index.js:
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
相关文章推荐
- [Nuxt] Update Vuex State with Mutations and MapMutations in Vue.js
- [Vue] Update Attributes, Classes and Styles in Vue.js with v-bind
- [Nuxt] Use Vuex Actions to Delete Data from APIs in Nuxt and Vue.js
- [Nuxt] Navigate with nuxt-link and Customize isClient Behavior in Nuxt and Vue.js
- [Nuxt] Build a Vue.js Form then use Vuex Actions to Post to an API in Nuxt
- [React] Update Component State in React With Ramda Lenses
- [Vue] Build Vue.js Apps with the Vue-CLI and Nuxt.js
- [Vue] Preload Data using Promises with Vue.js and Nuxt.js
- [Nuxt] Build a Navigation Component in Vue.js and Use in a Nuxt Layout
- [Vue] Create Vue.js Layout and Navigation with Nuxt.js
- [React] Call setState with null to Avoid Triggering an Update in React 16
- [Nuxt] Setup a "Hello World" Server-Rendered Vue.js Application with the Vue-CLI and Nuxt
- [译]Managing Vue.js State with Vuex
- Play vue.js with constant value in SailsJS
- [Angular 2] Managing State in RxJS with StartWith and Scan
- [Nuxt] Add Arrays of Data to the Vuex Store and Display Them in Vue.js Templates
- [Nuxt] Display Vuex Data Differently in Each Page of Nuxt and Vue.js
- vue中渲染数据可能有一个无限更新循环--You may have an infinite update loop in a component render function.
- 玩转JPA(一)---异常:Repeated column in mapping for entity/should be mapped with insert="false" update="fal
- JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype