Vue.js(九)
欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot
Vuex:响应式多组件共享变量
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。
安装:npm install vuex --save
使用:
引入:import Vuex from 'vuex'
安装插件:Vue.use(Vuex)
const store = new Vuex.Store({
//共享变量
state: {
//Vue.prototype.$store.state.counter
counter: 1000,
stu: [
{name: "ld", age: 12},
{name: "sara", age: 11},
{name: "admin", age: 10}
],
info: {ip: "127.0.0.1", password: "aaa"}
},
//改变共享变量
mutations: {
//this.$store.commit('increment', 1)
increment(state, count) {
state.counter += count;
},
//this.$store.commit('addStu', {name: 'user', age: 9})
addStu(state, stu) {
state.stu.push(stu);
},
//this.$store.commit({type: 'decrement', count: 1, img: ''})
decrement(state, payload) {
state.counter -= payload.count;
},
update(state) {
//响应式添加属性
Vue.set(state.info, 'address', '南京');
//响应式删除属性
Vue.delate(state.info, 'password');
}
},
//异步操作
actions: {
updateInfo(context, name) {
//this.$store.dispatch('updateInfo', 'Sara')
setTimeout(() => {
context.commit('update');
console.log(name);
}, 1000)
}
},
//获取共享变量
getters: {
//this.$store.getters.mul
mul(state, getters) {
return state.counter * state.counter;
},
//this.$store.getters.moreAgeStu(10)
moreAgeStu(state) { //如果需要传参,返回值必须是函数
return function (age) {
return state.stu.filter(s => s.age > age);
}
}
},
//模块化
modules: {
//this.$store.state.a.count
//this.$store.commit(...)
//this.$store.getters....
//this.$store.dispatch(...)
a: {
state: {count: 1},
mutations: {},
actions: {},
getters: {}
}
}
})
导出:export default store
引入:import Store from './store'
注册:new Vue({store})
使用:
Vue.prototype.$store.state.counter
this.$store.commit('increment', 1)
this.$store.commit('addStu', {name: 'user', age: 9})
this.$store.commit({
type: 'decrement',
count: 1
})
this.$store.dispatch('updateInfo', 'Sara')
this.$store.getters.mul
this.$state.getters.moreAgeStu(10)
main.js
import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
new Vue({
render: h => h(App)
}).$mount('#app')
// new Vue({
// el: '#app',
// components: '{App}', //注册组件
// template: '<App/>' //使用模板把 'el: '#app'' 挂载的内容替换掉
// })