zoukankan      html  css  js  c++  java
  • 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>
    View Code

    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>
    View Code
    this.$store.commit('')触发mutations中定义的方法,
    this.$store.dispatch('')触发actions中定义的方法。
     
    5:结果显示:
  • 相关阅读:
    MySQL数据库设计规范
    Docker安装redis
    Go-用本地时间解析时间字符串
    Docker安装mysql
    docker安装es
    Json官网文档
    leetcode题目和解答集合
    76. 最小覆盖子串
    165. 比较版本号
    958. 二叉树的完全性检验
  • 原文地址:https://www.cnblogs.com/longdb/p/12038494.html
Copyright © 2011-2022 走看看