vuex如何存储数据、获取数据、以及数据的持久化

前提必须已经在vue中安装了vuex插件不然无法使用,不知道怎么创建vue和安装vuex的可以看这个视频,node.js版本最好16以上不然可能会安装失败:30分钟学会Vue之VueRouter&Vuex 趁着暑假掌握一门技能 大学生前端实习毕业设计必备技能_哔哩哔哩_bilibili

1、存储数据:(源码会放在最后)

第一步,在vuex中matations模块中加入存储数据的方法

第二步,在需要提交数据的页面使用this.$store.dispatch方法

通过点击事件submitForm即可将数据传入vuex中。点击跳转到About页面

2、获取数据

在点击跳转的另外一个页面使用this.$store.state.xxx即可获取vuex中数据状态

运行效果:

3、持久化

当我们页面刷新的时候vuex会丢失之前获取的数据,如果想刷新后一直保存数据,我们可以安装插件vuex-persistedstate,

安装指令:

npm install vuex-persistedstate

提醒:必须使用管理员身份运行cmd终端不然可能会因为权限不够导致安装失败

安装成功后按这个模版来书写:

按照这个模版就可以存储state模块中的所有数据了。

运行效果:

源码:

登录页面:

<template>
  <div class="home">
    <div class="samsung">
      <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
        <el-form-item label="账号" prop="pass">
          <el-input  v-model="ruleForm.user" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="pass">
          <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="确认密码" prop="checkPass">
          <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="年龄" prop="age">
          <el-input v-model.number="ruleForm.age"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="submitForm('ruleForm')"  v-loading.fullscreen.lock="fullscreenLoading">提交</el-button>
        </el-form-item>
      </el-form>
    </div>
    <!-- <HelloWorld></HelloWorld> -->
  </div>
</template>

<script>
export default {
  data () {
    const checkAge = (rule, value, callback) => {
      if (!value) {
        return callback(new Error('年龄不能为空'))
      }
      setTimeout(() => {
        if (!Number.isInteger(value)) {
          callback(new Error('请输入数字值'))
        } else {
          if (value < 18) {
            callback(new Error('必须年满18岁'))
          } else {
            callback()
          }
        }
      }, 1000)
    }
    const validatePass = (rule, value, callback) => {
      if (value === '') {
        callback(new Error('请输入密码'))
      } else {
        if (this.ruleForm.checkPass !== '') {
          this.$refs.ruleForm.validateField('checkPass')
        }
        callback()
      }
    }
    const validatePass2 = (rule, value, callback) => {
      if (value === '') {
        callback(new Error('请再次输入密码'))
      } else if (value !== this.ruleForm.pass) {
        callback(new Error('两次输入密码不一致!'))
      } else {
        callback()
      }
    }
    return {
      fullscreenLoading: false,
      ruleForm: {
        pass: '',
        checkPass: '',
        age: '',
        user: ''
      },
      rules: {
        pass: [
          { validator: validatePass, trigger: 'blur' }
        ],
        checkPass: [
          { validator: validatePass2, trigger: 'blur' }
        ],
        age: [
          { validator: checkAge, trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    submitForm (formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          // alert('submit!')
          const loading = this.$loading({
            lock: true,
            text: '登录中',
            spinner: 'el-icon-loading',
            background: 'rgba(0, 0, 0, 0.7)'
          })
          setTimeout(() => {
            const user = this.ruleForm.user
            const pass = this.ruleForm.pass
            const age = this.ruleForm.age
            this.$store.dispatch('setUser', user)
            this.$store.dispatch('setPass', pass)
            this.$store.dispatch('setAge', age)
            loading.close()
            console.log('登录成功')
            this.$router.push('/about')
          }, 2000)
        } else {
          console.log('error submit!!')
          return false
        }
      })
    },
    resetForm (formName) {
      this.$refs[formName].resetFields()
    }
  }
}
</script>

<style scoped>
  .home {
    display: flex;
    justify-content: center;
    align-items: center;
  }

  .samsung {
    width: 500px;
    height: 500px;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  .denglu{
    display: flex;
    justify-content: center;
    align-items: center;
    width: 267px;
    height: auto;
  }
</style>

获取数据的页面:

<template>
  <div class="about">
    <h1>This is an about page</h1>
    <h1>{{user}}</h1>
    <h1>{{pass}}</h1>
    <h1>{{age}}</h1>
  </div>
</template>
<script>
export default {
  data () {
    return {
      user: '',
      pass: '',
      age: 0
    }
  },
  created () {
    this.type()
  },
  methods: {
    type () {
      this.user = this.$store.state.user
      this.pass = this.$store.state.pass
      this.age = this.$store.state.age
      console.log('1', this.user)
      console.log('2', this.pass)
      console.log('3', this.age)
    }
  }
}
</script>

vuex:

import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    user: '',
    pass: '',
    age: 0
  },
  getters: {
  },
  mutations: {
    SET_PASS (state, pass) {
      state.pass = pass
    },
    SET_USER (state, user) {
      state.user = user
    },
    SET_AGE (state, age) {
      state.age = age
    }
  },
  actions: {
    setUser ({ commit }, user) {
      commit('SET_USER', user)
    },
    setPass ({ commit }, pass) {
      commit('SET_PASS', pass)
    },
    setAge ({ commit }, age) {
      commit('SET_AGE', age)
    }
  },
  modules: {
  },
  plugins: [
    createPersistedState({
      // 存储方式:localStorage、sessionStorage、cookies
      storage: window.sessionStorage,
      // 存储的 key 的key值
      key: 'store',
      reducer (state) { // render错误修改
        // 要存储的数据:本项目采用es6扩展运算符的方式存储了state中所有的数据
        return { ...state }
      }
    })
  ]

})

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用提到的情景模式,"SCENE_MODE_NIGHT"是相机支持的夜景模式。根据引用的描述,当相机设置为"USE_SCENE_MODE"时,必须使用"ANDROID_CONTROL_SCENE_MODE"来确定3A算法的行为。对于"SCENE_MODE_NIGHT",HAL可能会倾向于使用连续对焦(AF)模式,以便在夜间场景下获得更好的焦点。此外,在"SCENE_MODE_FACE_PRIORITY"下,AE/AWB/AF模式的工作方式与在"ANDROID_CONTROL_MODE_AUTO"模式下相同,但3A算法会倾向于进行测光,并对焦于已检测到的人脸。 因此,"SCENE_MODE_NIGHT"是相机的夜景模式,可以在夜间场景下获得更好的焦点。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *2* *3* [androidCamera获取系统支持的情景模式](https://blog.csdn.net/weixin_35899510/article/details/117764760)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *4* [Android Camera 3A 模式和状态转换](https://blog.csdn.net/haiping1224746757/article/details/106472497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值