• vuex状态管理


    msvue组件间通信时,若需要改变多组件间共用状态的值。通过简单的组件间传值就会遇到问题。如:子组件只能接收但改变不了父组件的值。由此,vuex的出现就是用作各组件间的状态管理。

    简单实例:vuex的使用

    1,安装

    cnpm  install  vuex --save

    2,文件位置

    3,在main.js里引入store.js

    4,一个简单的使用vuex的实例     在子组件中输入用户名,密码。在store.js文件中能够获取到输入后的值。 通过   $store.state.nameMsg 可以在任何组件中获取到最新的用户名及密码。这样可以轻松实现组件间的通信

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex);
    // 首先声明一个状态 state
    const state = {
      nameMsg: '',
      pwdMsg:''
    };
    // 然后给 actions 注册一个事件处理函数,当这个函数被触发时,将状态提交到 mutaions中处理
    const actions = {
      saveName({commit}, msg) {
        commit('saveMsg', msg)    // 提交到mutations中处理
      },
      savePwd({commit}, msg) {
        commit('savePwdMsg', msg)    // 提交到mutations中处理
      }
    };
    // 更新状态
    const mutations = {
      saveMsg(state, msg) {
        state.nameMsg = msg;
      },
      savePwdMsg(state,msg){
        state.pwdMsg = msg;
      }
    };
    // 获取状态信息
    const getters = {
      showState(state) {
        console.log(state.nameMsg);
        console.log(state.pwdMsg);
      }
    };
    
    
    // 下面这个相当关键了,所有模块,记住是所有,注册才能使用
    export default new Vuex.Store({
      state,
      getters,
      mutations,
      actions
    })

     登录    login.vue

    <template>
      <div id="login" class="login-content">
        <user></user>
        <enter></enter>
        <p class="content-block"><a @click=showState class="button button-fill button-success">登录</a></p>
      </div>
    </template>
    <script>
      // 引入mapGtters,很重要
      import { mapGetters } from 'vuex'
      import enter from '../../components/form.vue'
      import user from '../../components/header.vue'
      export default {
        methods: {
          ...mapGetters([
            // 在store.js 中注册的getters
            'showState'
          ])
        },
        components: {
          enter,
          user
        }
      }
    </script>
    <style>
      .login-content {
        margin: 0 auto;
         300px;
        height: 500px;
        border: 1px solid #3db5b5;
      }
    </style>

    子组件  form.vue

    <template>
      <div>
        <input type="text" @blur=saveName(username) v-model="username" placeholder="Your name">
        <input type="text" @blur=savePwd(password) v-model="password" placeholder="Your password">
      </div>
    </template>
    
    <script type="text/javascript">
      // 引入mapActions,很重要
      import { mapActions } from 'vuex'
      export default {
        data() {
          return {
            username:'',
            password: ''
          }
        },
        methods: {
          ...mapActions({
            // 在input 的blur 事件中触发回调,并将输入值作为参数返回到store中
            saveName: 'saveName',
            savePwd: 'savePwd'
          })
        }
      }
    </script>

    子组件   header.vue

    <template>
      <div class="header">
        <p>{{$store.state.nameMsg}}</p>
        <p>{{$store.state.pwdMsg}}</p>
      </div>
    </template>
    
    <script type="text/javascript">
    </script>
    
    <style>
      .header {
         100%;
        height: 50px;
        background-color: #DADADA;
      }
    </style>
  • 相关阅读:
    CCF2014123集合竞价(C语言版)
    CCF2016092火车购票
    CCF2013123最大的矩形(C语言版)
    CCF2015122消除类游戏(C语言版)
    CCF2014032窗口(C语言)
    CCF2016093炉石传说(C语言版)
    go module 获取码云私有仓库代码
    centos7 编译安装 redis-6.0.5
    goland2019.2破解方法
    mac下protobuf配置记录
  • 原文地址:https://www.cnblogs.com/shmily-code/p/9511627.html
Copyright © 2020-2023  润新知