http://pan.baidu.com/s/1hrJfpli demo下载地址javascript
在一些项目中有不少数据状态之间要实现数据共享状态共享,例如购物车的数据、用户的登陆状态等等。vue父元素是能够经过props向子元素传递参数,子元素也能够通用smit向父元素传递参数。可是像购物车这种在项目中多个位置的引用时就会变得很麻烦。例如项目中使用了三个购物车的组件,那么当其中一个组件的值发生改变时,就要经过自身告诉父组件个人值发生改变了,而后父组件在通知其余两个购物车组件值发生改变了,须要进行同步,这样就会变得很麻烦。而vue-v就能够帮助咱们解决这个繁琐的问题。vue
npm install vuex java
项目需求:实现购物车商品增长和减小,并计算出商品的总价。ajax
准备工做vuex
import Vuex from 'vuex'
Vue.use(Vuex)
state:保存的是原始数据,能够理解为须要共享的数据或状态,npm
getters:能够理解为是staore的计算属性,能够实现就store的计算,可是不能更改。例如你想知道两个值相加、相乘。都是很是不错的选择。服务器
mutations:mutations中的方法能够对state中的数据进行改变。函数
action:action中的方法能够调用mutations中的方法,但不可修改state中的原始数据。action中的函数可使用ajax的技术对服务器进行数据交互。而且能够在回调中使用commit调用mutations中的方法,例如经过context.commit('increment', price)increment是须要调用mutations中的方法名,price是须要传入的参数。 mutations中的方法再去更改state的原始数据。this
let store = new Vuex.Store({ state: { totalPrice: 0 }, getters: { getTotal (state) { return state.totalPrice*2 } }, mutations: { increment (state, price) { state.totalPrice += price }, decrement (state, price) { state.totalPrice -= price } }, actions: { increase (context, price) { context.commit('increment', price) } } })
在组件内部使用 this.$store.state.属性名便可。spa
实例代码:
computed: { totalPrice () { return this.$store.state.totalPrice }
computed: { getTotal () { return this.$store.getters.getTotal } }
methods: { addOne () { this.$store.commit('increment', this.price) }, minusOne () { this.$store.commit('decrement', this.price) } }
methods: { addOne () { this.$store.dispatch('increase', this.price) } }