对 vue 进行状态管理的, 集中存储全部组件的全部状态, 解决多个组件共享数据的问题.
即, 全部组件能够拿到一样的状态, 组件间共享数据javascript
parent:vue
<template> <div> parent: {{ info }} <Child :title="msg" @sendMsg="handlerMsg"/> </div> </template> <script> import Child from "./Child"; export default { name: "Parent", components: {Child}, data() { return { msg: "hello son", info: "" } }, methods: { handlerMsg(info) { this.info = info } } } </script> <style scoped> </style>
child:java
<template> <div> Child: receive from parent: {{ title }} <div> <button @click="sendMsg">emit </button> </div> </div> </template> <script> export default { name: "Child", data() { return { } }, props: { title: { type: String, default: "" } }, methods: { sendMsg() { this.$emit("sendMsg", "the message from son ") } } } </script> <style scoped> </style>
view -> (dispath) Action -> (Commit)Mutations -> (Mutate) State -> View
注意: Actions不会必需品, 若是有异步操做才可能用到 Action, 不然不能够使用vuex
cnpm install --save vuex
// vuex import Vuex from 'vuex' Vue.use(Vuex)
在src 下建立 store 文件夹, 并新建 index.js
写入storeshell
// vuex import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) // 建立vuex的store const store = new Vuex.Store({ state: { count: 5 }, // 更改store的状态 mutations: { increment (state) { state.count++ }, decrement (state) { state.count-- } }, // 有异步的时候, 须要action actions: { increment(context) { context.commit('increment') }, decrement (context) { setTimeout(function () { context.commit("decrement") }, 10) } }, // 经过getter 进行数据获取 getters: { getState(state) { return state.count > 0 ? state.count : 0; } } }) export default store
在 main.js 中导入, 并注入到 App中npm
import store from './store' Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', // 注入 store store, router, components: { App }, template: '<App/>', })
<template> <div> <div> test... {{ msg }}<br/> </div> <div> 获取值 -- {{ getCount }} <br/> <button @click="add">inc</button> <button @click="des">decri</button> </div> </div> </template> <script> export default { name: "outter", data() { return { msg: "hello" } }, computed: { // 避免编程负数, 须要经过方法进行获取 getCount() { // return this.$store.state.count return this.$store.getters.getState; } }, methods: { add() { this.$store.commit("increment") }, des() { // 使用 action中的异步方法 this.$store.dispatch("decrement") }, } } </script> <style scoped> </style>