微信截图_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})
},
网友评论