D:workspacexxxsrcmain.js
引用、注册、定义state、mutations
import Vue from 'vue' import App from './App' import VueRouter from 'vue-router' import Vuex from 'vuex' import Apple from '@/components/Apple' import Banana from '@/components/Banana' Vue.use(VueRouter) Vue.use(Vuex) let store = new Vuex.Store({ state: { totalPrice: 0 }, mutations: { increment (state, price) { state.totalPrice += price }, decrement (state, price) { state.totalPrice -= price } } }) let router = new VueRouter({ mode: 'history', routes: [ { path: '/apple', component: Apple }, { path: '/banana', component: Banana } ] }) /* eslint-disable no-new */ new Vue({ el: '#app', router, store, template: '<App/>', components: { App } })
D:workspacexxxsrcApp.vue
computed计算并呈现结果(show)
<template> <div id="app"> <img src="./assets/logo.png"> {{ totalPrice }} <Apple></Apple> <Banana></Banana> </div> </template> <script> import Apple from './components/Apple' import Banana from './components/Banana' export default { components: { Apple, Banana }, name: 'App', computed: { totalPrice () { return this.$store.state.totalPrice } } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
D:workspacexxxsrccomponentsApple.vue
调用mutations中的方法改变值(set)
<template> <div> <h1 >{{ msg }}</h1> <button @click="addOne">addOne</button> <button @click="minusOne">minusOne</button> <router-view/> </div> </template> <script> export default { name: 'Apple', data () { return { msg: 'I am an apple', price: 5 } }, methods: { addOne () { this.$store.commit('increment', this.price) }, minusOne () { this.$store.commit('decrement', this.price) } } } </script>
D:workspacexxxsrccomponentsBanana.vue
<template> <div> <h3 >{{ mg }}</h3> <button @click="addOne">addOne</button> <button @click="minusOne">minusOne</button> </div> </template> <script> export default { name: 'Banana', data () { return { mg: 'I am a banana', price: 15 } }, methods: { addOne () { return this.$store.commit('increment', this.price) }, minusOne () { return this.$store.commit('decrement', this.price) } } } </script>
下图可知,mutations扮演着改变状态的作用(同步)
下文