在src
下建立一个文件夹叫作vuex
。里面定义三个文件。github
mutation-types.js
定义类型的// src/vuex/mutation-types.js export const SET_HEADER_TITLE = 'SET_HEADER_TITLE'
actions.js
操做,能够分解成多个文件// src/vuex/actions.js /** * 用统一的函数处理并分发mutations。 * @param type * @returns {function({dispatch: *}, ...[*]): *} */ function makeAction (type) { return ({ dispatch }, ...args) => dispatch(type, ...args) } import { SET_HEADER_TITLE } from './mutation-types' /** * actions */ export const setTitle = makeAction(SET_HEADER_TITLE)
store.js
入口文件,在根组件调用,而后全部子组件能够共享数据。// src/vuex/store.js import Vue from 'vue' import Vuex from 'vuex' //import createLogger from 'vuex/logger' Vue.use(Vuex) //Vue.config.debug = true //const debug = process.env.NODE_ENV !== 'production' // 导入各个模块的初始状态和 mutations import index from './modules/index' export default new Vuex.Store({ // 组合各个模块 modules: { index }, //strict: debug, //moddlewares: debug ? [createLogger()] : [] })
modules/index.js
只是例子用的,一个index的操做,须要定义数据的状态和mutation。actions.js
只是分发操做。// src/vuex/modules/index.js import { SET_HEADER_TITLE } from '../mutation-types' const state = { title: 'default', info: { name:'' } } const mutations = { [SET_HEADER_TITLE](state, newTitle) { state.title = newTitle } } export default { state, mutations }
// src/App.vue import store from './vuex/store' import HeaderComponent from './components/header' import FooterComponent from './components/footer' export default { store, components: { HeaderComponent, FooterComponent } }
// src/components/header.vue // 从vuex拿数据,而后渲染到页面上 // 若是须要修改能够调用setTitle import { setTitle } from '../vuex/actions' export default { vuex: { //获取vuex状态数据 getters: { title: state => state.title, info: ({index}) => index.info }, //状态变动事件 actions: { setTitle } } }