Vuex
- 可以理解为公共仓库,它只要一刷新数据就清空。负责组件之间传值。父子,兄弟都可以
Vuex 分成几个部分
state (存放公共数据)
getters (对 state 数据二次封装,防止污染 state)
mutations (里面都是方法,它的作用就是修改 state 里面的数据)
actions (可以理解为 mutations 里面的一个合集,它能执行很多个 mutations)
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state = {
//要设置的全局访问的state对象
showFooter: true,
changableNum: 0
//要设置的初始属性值
}
const getters = {
//实时监听state值的变化(最新状态)
isShow(state) {
//承载变化的showFooter的值
return state.showFooter
},
getChangedNum() {
//承载变化的changebleNum的值
return state.changableNum
}
}
const mutations = {
show(state) {
//自定义改变state初始值的方法,这里面的参数除了state之外还可以再传额外的参数(变量或对象);
state.showFooter = true
},
hide(state) {
//同上
state.showFooter = false
},
newNum(state, sum) {
//同上,这里面的参数除了state之外还传了需要增加的值sum
state.changableNum += sum
}
}
const actions = {
hideFooter(context) {
//自定义触发mutations里函数的方法,context与store 实例具有相同方法和属性
context.commit('hide')
},
showFooter(context) {
//同上注释
context.commit('show')
},
getNewNum(context, num) {
//同上注释,num为要变化的形参
context.commit('newNum', num)
}
}
const store = new Vuex.Store({
state,
getters,
mutations,
actions
})
export default store
使用的时候 actions 第一个参数和 mutations 的第一个参数都可以不传
mapState,mapMutations 是 Vue 提供的语法糖可以直接使用
<script>
import { mapState, mapMutations } from 'vuex'
export default {
computed: {
...mapState({
singerId: 'singer' //改名
})
},
data() {
return {
message: '汇总',
showflag2: false
}
},
methods: {
...mapMutations({
setsinger: 'setsinger' //改名
}),
// 点击方法
gotourl(id) {
this.setsinger(id)
}
}
}
</script>
Vuex 也可以分着写,然后在汇总
- 单独的第一个 store 文件
export default {
state: {
orderData: ''
},
mutations: {
updateOrder(state: any, orderData: any) {
state.orderData = orderData
}
}
}
- 单独的第二个 store 文件
export default {
state: {
modalHow: ''
},
mutations: {
updateModalClose(state: any, modalClose: any) {
state.modalClose = modalClose
}
}
}
- 汇总
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import footer from './modules/kiosk_footer' // 引入第一个store对象
import cart from './modules/kiosk_cart' //引入第二个store对象
export default new Vuex.Store({
modules: {
footer,
cart
}
})