【Vue】Vuex的安装和实现【全局参数传递】实例(图文+完整源代码)

一、安装Vuex

npm i vuex@3

二、在src新建文件夹store和文件index.js

三、main.js中引用vuex和store

// 引入Vue
import Vue from 'vue'
// 引入app组件,它是所有组件的父组件
import App from './App.vue'
// 引入VueRouter插件
// eslint-disable-next-line no-unused-vars
import VueRouter from 'vue-router'

// 引入Vuex
// eslint-disable-next-line no-unused-vars
import Vuex from 'vuex'

// 引入store
import store from './store/index.js'

// ElementUI

import ElementUI from 'element-ui' //element-ui的全部组件
import 'element-ui/lib/theme-chalk/index.css'//element-ui的css
Vue.use(ElementUI) //使用elementUI


// 关闭vue生产提示
Vue.config.productionTip = false
// 创建vue实例对象 -- vm
const vm = new Vue({
  el: "#app",
  // 完成了这个功能:将APP组件放入窗口中
  render: h => h(App),
  router:'hello',
  store:store,
  beforeCreate() {
    Vue.prototype.$bus = this;
  },

})

console.log(vm);

四、index.js中增加actions、mutations、state属性

// 该文件用于创建Vuex中最为核心的store


// 引入Vue和Vuex

import Vue from 'vue'
import Vuex from  'vuex'

// 使用Vuex插件
Vue.use(Vuex)

// 准备actions - 响应组件中的动作
const actions ={}

// 准备mutations - 操作数据(state)

const mutations ={}

// 准备actions - 存储数据

const state={}


// 创建并暴露store

export default new Vuex.Store({
    actions,
    mutations,
    state,
})

console.log(this)

二、全局参数传递的实例

 需要6个文件

 1、main.js

// 引入Vue
import Vue from 'vue'
// 引入app组件,它是所有组件的父组件
import App from './App.vue'
// 引入VueRouter插件
// eslint-disable-next-line no-unused-vars
import VueRouter from 'vue-router'

// 引入Vuex
// eslint-disable-next-line no-unused-vars
import Vuex from 'vuex'

// 引入store
import store from './store/index.js'

// ElementUI

import ElementUI from 'element-ui' //element-ui的全部组件
import 'element-ui/lib/theme-chalk/index.css'//element-ui的css
Vue.use(ElementUI) //使用elementUI


// 关闭vue生产提示
Vue.config.productionTip = false
// 创建vue实例对象 -- vm
const vm = new Vue({
  el: "#app",
  // 完成了这个功能:将APP组件放入窗口中
  render: h => h(App),
  router:'hello',
  store:store,
  beforeCreate() {
    Vue.prototype.$bus = this;
  },

})

console.log(vm);

2、store / index.js

// 该文件用于创建Vuex中最为核心的store


// 引入Vue和Vuex

import Vue from 'vue'
import Vuex from 'vuex'

// 使用Vuex插件
Vue.use(Vuex)

// 准备actions - 响应组件中的动作(执行的函数)
const actions = {

    add(context,value) {
        context.commit('ADD',value)
    },

    jian(context,value) {
        context.commit('JIAN',value)
    }

}

// 准备mutations - 操作数据(state)

const mutations = {

    ADD(state,value) {
        state.num=value+1
    },
    JIAN(state,value) {
        state.num=value-1
    },

}

// 准备actions - 存储数据

const state = {
    num: 6
}


// 创建并暴露store

export default new Vuex.Store({
    actions,
    mutations,
    state,
})

console.log(this)

3.App.vue

<template>
  <div id="myapp">
    <!-- 第1行 -->
    <Number_1></Number_1>
    <br />
    <br />
    <Number_2 style="float: left"></Number_2>

    <Number_3 style="float: left"></Number_3>
  </div>
</template>

<script>
// 引入组件

import Number_1 from "./components/Number_1.vue";
import Number_2 from "./components/Number_2.vue";
import Number_3 from "./components/Number_3.vue";

// 注册组件
export default {
  name: "App",
  components: {
    Number_1,
    Number_2,
    Number_3,
  },
  data() {
    return {};
  },
  methods: {
    getInfo(a, b) {
      this.appSchoolName = a;
      this.appAddress = b;
    },
  },
  mounted() {
    console.log("app", this);
  },
};
</script>

<style scoped>
body {
  margin: 0;
  padding: 0;
  background-color: rgb(147, 149, 149);
}
#myapp {
  /* background-color: cornflowerblue; */
  /* border: 1px rgb(134, 0, 0) dashed; */
  /* height: 400px; */
  /* padding-top: 20px; */
  /* padding-left: 10px; */
  /* background-color: aqua; */
}
.menu_1 {
  color: red;
}
</style>

4.Number_1.vue(页面显示渲染“全局值”)

<template>
  <div class="m_list">组件1:当前的值为:【{{ $store.state.num }}】</div>
</template>

<script>
export default {
  name: "Number_1",
  mounted() {
  },
};
</script>

<style scoped>
.m_list {
  padding-left: 20px;
  line-height: 50px;
  overflow: hidden;
  width: 91.5%;
  height: 50px;
  margin: 0 auto;
  margin-top: 10px;
  background-color: rgb(240, 240, 240);
}
</style>

5.Number_2.vue

<template>
  <div @click="add">组件2:当前值+1</div>
</template>

<script>

export default {
  name: "Number_2",
  methods:{
    add(){
      this.$store.dispatch('add', this.$store.state.num)
    }
  }
};
</script>

<style scoped>
div {
  margin-top: 10px;
  margin-left: 10px;
  padding-left: 20px;
  line-height: 50px;
  overflow: hidden;
  width: 150px;
  height: 50px;
  border-radius: 10px;
  background-color:rgb(247, 226, 226);
}
</style>

6.Number_3.vue

<template>
  <div @click="jian">组件3:当前值-1</div>
</template>

<script>

export default {
  name: "Number_3",
  methods:{
    jian(){
      this.$store.dispatch('jian', this.$store.state.num)
    }
  }
};
</script>

<style scoped>
div {
  margin-top: 10px;
  margin-left: 10px;
  padding-left: 20px;
  line-height: 50px;
  overflow: hidden;
  width: 150px;
  height: 50px;
  border-radius: 10px;
  background-color:rgb(247, 226, 226);
}
</style>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敦厚的曹操

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值