vuex简单使用。

项目结构:

1:首先在项目中新建store.js文件,.js文件内容如下:

import Vue from ‘vue‘
import Vuex from ‘vuex‘

Vue.use(Vuex)
export default new Vuex.Store({
    state:{
     count:0
    },
    getters:{
        addcountgetters(state){
           return state.count + 4;
        }
    },
    mutations:{//相当于methods,定义一些方法(同步)。方法里有个默认参数--state
      addcount(state){
          state.count++;
      },
      subcount(state){
          state.count--;
      }
    },
    actions:{//异步操作(也可以定义同步方法)。提交mutation,而不是直接变更状态。
      addcountasync(context){
          setTimeout(()=>{
            context.commit(‘addcount‘);
          },1000);//延迟一秒。
      }
    }
})

2:在main.js中注册store.js文件,js文件内容如下:

import Vue from ‘vue‘
import App from ‘./App.vue‘
import router from ‘./router‘
import store from ‘./store‘

Vue.config.productionTip = false

//2019.12.11,全局路由守卫。
router.beforeEach((to,from,next)=>{
  console.log(to.path+‘,‘+from.path);
  if(to.path != ‘/child‘){
    next();
  }else{
    alert(‘没有权限进入该页面!‘)
  }

})
new Vue({
  router,//挂载router.js
  store,
  render: h => h(App),
}).$mount(‘#app‘)

3:在views目录下新建Store.vue组件,在该组件中的计算属性中监听,组件内容如下:

 1 <template>
 2     <div>
 3     <!-- <h5 style="backgroudcolor:red">Vuex:{{showstorecount}}</h5> -->
 4     <h5>Vuex:{{showcount}}</h5>
 5     <h5>计算属性:{{showstatevalue}}</h5>
 6     <h5>vuex中的计算属性:getters:{{addcountgetters}}</h5>
 7     </div>
 8 </template>
 9
10 <script>
11     //import {mapState,mapGetters} from ‘vuex‘
12     import {mapState} from ‘vuex‘
13
14     export default {
15         // computed: {//第一种方式。
16         //     showstorecount() {
17         //         return this.$store.state.count;
18         //     }
19         // },
20         // computed:mapState({ //第二种,但是这样就使用不了计算属性啦。
21         //     count:state=>state.count,
22         //     showcount:‘count‘ //等于 count:state=>state.count
23         // })
24         computed:{
25             ...mapState({//es6 展开。这样既可以用vuex,也可以使用计算属性。
26              showcount:‘count‘,
27             }),
28             // ...mapGetters([//名字和getters中的属于一样时,用数组就可以映射。
29             //     ‘addcountgetters‘
30             // ]),
31             showstatevalue(){//监听中使用计算属性监听vuex中的数据。
32                 return this.$store.state.count*2;
33             },
34             addcountgetters(){
35                 return this.$store.getters.addcountgetters;
36             }
37         },
38     }
39 </script>
40
41 <style lang="scss" scoped>
42
43 </style>

4:在主组件App.vue中添加触发store 中mutations定义的同步方法和actions中定义的异步或者同步方法。

 1 <template>
 2   <div id="app">
 3    <!-- <m-parent></m-parent> -->
 4    <button @click="sendmsg">非父子传数据(bus)</button>
 5    <button @click="tohome">home</button>
 6
 7    <button @click="addcount">vuex改变state(addcount)</button>
 8    <button @click="subcount">vuex改变state(subcount)</button>
 9
10     <button @click="addcountasync">vuex改变state(addcountasync)</button>
11    <router-view/>
12   </div>
13 </template>
14
15
16 <style>
17
18 </style>
19 <script>
20 //import MParent from ‘./views/Parent‘
21 import bus from ‘./until/bus‘
22 export default {
23   // components: {
24   //   MParent,
25   // },
26   methods: {
27     sendmsg() {
28       bus.$emit(‘appsendmsg‘,‘I am from app!‘);
29     },
30     tohome(){
31       this.$router.push({path:‘/home‘});
32     },
33     addcount(){//执行vuex中的同步方法。mutations
34       this.$store.commit(‘addcount‘);
35     },
36     subcount(){
37      this.$store.commit(‘subcount‘);
38     },
39      addcountasync(){
40      this.$store.dispatch(‘addcountasync‘);
41     },
42   },
43 }
44 </script>

this.$store.commit(‘‘)触发mutations中定义的方法,

this.$store.dispatch(‘‘)触发actions中定义的方法。

5:结果显示:

原文地址:https://www.cnblogs.com/longdb/p/12038494.html

时间: 2024-10-07 15:15:53

vuex简单使用。的相关文章

vuex简单示例

一.vuex是什么,解决了什么问题? 官方解释是:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.个人理解是因为vue各个组件是相对独立的,要共享数据,就变的很麻烦.vuex就是为了解决各个组件传递数据与共享数据. 二.vuex的核心概念 vuex的核心概念是store,store中包括了state,mutation,action,getter 1.state:需要用到的状态变量2.mut

vuex简单----&gt;复杂----&gt;模块

话不多说,开干. 首先,使用vue-cli3创建一个项目 选择最后一个 选择自己需要的功能,安装之 最终项目的目录如下: 为了使讲解更简单明了,我们修改一下目录下的一些文件,将app.vue下的文件都注释掉,如下图: 现在我们开始一个最简单的vuex应用.打开store.js文件,编辑如下 : 打开App.vue文件,编辑如下: main.js文件不需要做修改,然后启动项目: 最终显示结果如下: 是的,这就是最简单的一个vuex应用了. State 如果世界上任何事情都是如此简单,那这个世界就太

vuex: 简单(弹窗)实现

在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时候 , 就遇到了这种问题 : 一个页面有很多表单 , 我试图将表单写成一个单文件组件 , 但是表单 ( 子组件 ) 里的数据和页面 ( 父组件 ) 按钮交互的时候 , 它们之间的通讯很麻烦 : <!--父组件中引入子组件--> <template> <div> <a href="javascript:;" @click="show = true"&

vuex简单整理

index.js:入口文件 state.js:存储状态.也就是变量. getters.js:派生状态.也可以理解为set.get中的get.有两个可选参数,state.getters分别可以获取state中的变量和其它getters.和vue中的computed类似. mutations.js:提交状态修改.可以理解为set.get中的set.每一个mutation都有一个字符串的事件类型和回调函数.第一个参数默认为state.vuex中唯一修改state的方式,不支持异步操作.和vue中的me

Vuex简单使用

<template> <div class="home"> <!-- {{this.$store.state.count}} --> <!-- 这里的count1是从index.js里面的state里面拿出来的 --> {{count1}}   <!-- 可以在事件后面传参数,比如数字1 --> <button @click="add(1)">+</button> <butto

简简单单的Vue3(插件开发,路由系统,状态管理)

既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 插件 路由(vue-router) 状态管理模式(Vuex) 那在上篇文章,我们讲了,Vue的生命周期,Vue的组件,那这篇文章我们讲下更进阶的:插件,路由,状态管理. 插件 插件通常会为 Vue 添加全局功能.插件的范围没有限制--一般有下面几种: 添加全局方法或者属性,如: vue-custom-element 添加全局资源:指令/过滤器/过渡等,如 vue-touch 通过全局

vue:简单方法替代vuex或者bus

兄弟组件,隔代组件传值很麻烦,方法虽然多,但都各有缺点. vuex: 适合数据量大,并且函数集中处理. bus:适合数据虽少,却不得不用的时候,维护困难. root:这儿指将值挂在root组件上,需要的组件都到root上去取. 有时候数据量不多,觉得引入vuex又使得项目变得沉重,使用全局bus又显得不好维护,使用跟组件更是感觉跟理念不符合. store:这就是介绍的简单方法.详细如下 需了解: 1.import 引入文件是引用的地址,并不是将数据复制一份,就是说该变了数据后,原文件的数据会发生

【mock.js】后端不来过夜半,闲敲mock落灯花 (附Vue + Vuex + mockjs的简单demo)

mock的由来[假] 赵师秀:南宋时期的一位前端工程师 诗词背景:在一个梅雨纷纷的夜晚,正处于项目编码阶段,书童却带来消息:写后端的李秀才在几个时辰前就赶往临安度假去了,!此时手头仅有一个简单的数据接口文档的赵师秀慨叹一声:"好吧,那还是我自己先模拟一下后端的接口吧" _(:3 」∠)_  再后来,就有了那句千古名句啦~~( 为了表示对赵师秀先生的歉意,文末我将附上原文)   如果我说这就是前后端分离思想和mock.js的由来,你会信么?(?´ω`?) mock的由来[真] 我们在Vu

vue的挖坑和爬坑之vuex的简单入门

首先vuex的中文文档https://vuex.vuejs.org/zh-cn/ 首先vuex是什么,官方解释是 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试.状态快照导入导出等高级调试功能. 我的理解是 就是vue组件之间的数据管理 event bus 对