Vuex

2018-10-30  本文已影响0人  夜夜夜空灵
微信截图_20181030160531.png
微信截图_20181030161411.png

首先我们在 vue.js 2.X 开发环境中安装 vuex :

npm install vuex --save
微信截图_20181030164526.png

然后在store目录下新建以下文件:
1.state.js(存放所有的状态)
2.actions.js(更新所有的状态)
3.mutations.js
4.mutation-types.js(存放action和Mutations中的共同所有的常量)
5.getters.js
6.index.js

接着就需要在index.js文件下引入所有的文件了

import Vue from 'vue'
import Vuex from 'vuex'

import state from './state'
import mutations from './mutations'
import actions from './actions'
import getters from './getters'

Vue.use(Vuex);

//初始化一个store对象,因为取什么都是通过$store来取
export default new Vuex.Store({
  state,
  actions,
  mutations,
  getters
})

由于Vuex是要在全局范围内都能使用,因此要在main.js中引入

import store from './store'

再然后 , 在实例化 Vue对象时加入 store 对象 :

new Vue({
  el: '#app',
  router,
  store,//使用store
})

实现简易todolist功能

1.调用dispatch方法去使用vuex中的方法

<template>
  <div class="todo-header">
    <input
      type="text"
      placeholder="请输入今天的任务清单,按回车键确认"
      v-model="title"
      @keyup.enter="addItem"
    />
  </div>
</template>

<script>
  export default {
    name: "Header",
    props: {
      addTodo: Function
    },
    data() {
      return {
        title: ''
      }
    },
    methods: {
      addItem() {
        // 1.1 判断是否合理
        const title = this.title.trim();
        if(!title){
           alert('输入的内容不能为空');
           return;
        }
        // 1.2 生成一个todo对象
        const todo = {title, finished: false};
        // 1.3 调用方法
        // this.addTodo(todo);
        this.$store.dispatch('addTodo', todo);  
        // 1.4 清空输入框
        this.title = ''
      }
    }
  }
</script>

2.实现actions中的方法
要确保方法名addTodo一致,同时 {commit}这个参数是vuex自带的,只要一生成就有,第二个参数为所需要传递的数据

export default {
 // 添加一条记录
 addTodo({commit}, todo){
     commit()
 },

3.为了使coomit能够进一步提交,需要在mutation-types中确定一个跟 actions中一样的方法名

export const ADD_TODO = 'add_todo'; // 增加一条记录

4.在mutations中实现进一步提交修改state中的数据
state也是生成后自带的一个参数

import {
 ADD_TODO,
} from './mutation-types';

export default {
 // 添加纪录
 [ADD_TODO](state, {todo}){
   state.todos.unshift(todo);
 },

5.通过actions中的commit实现提交方法到Mutation中修改数据
导入公共方法ADD_TODO 然后通过commit提交方法以及数据

import {
  ADD_TODO,
} from './mutation-types'

export default {
  // 添加一条记录
  addTodo({commit}, todo){
      commit(ADD_TODO, {todo})
  },
上一篇 下一篇

猜你喜欢

热点阅读