zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    oracle锁表查询,资源占用,连接会话,低效SQL等性能检查
    oracle临时表
    oracle列转行
    oracle数据库查询重复记录
    查找mysql的cnf文件位置
    Nginx反向代理,负载均衡,redis session共享,keepalived高可用
    Linux 软件安装
    Linux上网设置
    c#学习内容
    PHP八大设计模式
  • 原文地址:https://www.cnblogs.com/shmily-code/p/9511627.html
Copyright © 2011-2022 走看看