對 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>