vue中vuex的五个属性和基本用法,另加js-cookie的使用

这篇具有很好参考价值的文章主要介绍了vue中vuex的五个属性和基本用法,另加js-cookie的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue中vuex的五个属性和基本用法,另加js-cookie的使用,vue.js,前端,javascript

vue中vuex的五个属性和基本用法,另加js-cookie的使用,vue.js,前端,javascript

VueX 是一个专门为 Vue.js 应用设计的状态管理构架,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data )。

Vuex有五个核心概念:

state, getters, mutations, actions, modules。

1. state:

vuex的基本数据,用来存储变量

2. geeter:

从基本数据(state)派生的数据,相当于state的计算属性

3. mutation:

提交更新数据的方法,必须是同步的(如果需要异步使用action)。每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。

回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数,提交载荷作为第二个参数。

commit:同步操作,写法:this.$store.commit('mutations方法名',值)

如:this.$store.commit('SET_PASSWORD',data.Password)

4. action:

和mutation的功能大致相同,不同之处在于 ==》1. Action 提交的是 mutation,而不是直接变更状态。 2. Action 可以包含任意异步操作。

dispatch:异步操作,写法:this.$store.dispatch('actions方法名',值)

如:this.$store.dispatch('login',res.data)文章来源地址https://www.toymoban.com/news/detail-634672.html

5. modules:

模块化vuex,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。

Vuex的用法:

文件夹步骤及引入与挂载

在vue项目的src文件下创建store文件夹(如果已经安装好了vuex的话),然后在store文件夹中创建index.js和getters.js文件与Modules文件夹

在项目的main.js中引入 和挂载

import store from './store'

let vue = new Vue({

router,

store,

render: (h) => h(App),

}).$mount("#app");

store文件下的index.js

//store文件下的index.js
import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
import bankCard from './Modules/bankCard'
import user from './Modules/user'

Vue.use(Vuex)

export default new Vuex.Store({
  getters,
  modules: {
    bankCard,
    user
  }
})

store文件下的getters.js

//store文件下的getters.js
const getters = {
  bankCards: state => state.bankCard.bankCards,
  selectBankCards: state => state.bankCard.selectBankCards,
  token: state => state.user.token
}
export default getters

在modules文件夹下创建一个user.js文件,user.js内容:


import { setToken, removeToken } from '@/utils/auth'
import { getLogin } from '@/api/login'

const user = {
  state: {
    name: '',
    roles: [],
    permissions: [],
    token: undefined,
    // Password:'',
  },

  mutations: {
    /*
    commit:同步操作,写法:this.$store.commit('mutations方法名',值)
    如:this.$store.commit('SET_PASSWORD',data.Password)
    */
    SET_TOKEN: (state, token) => {
      state.token = token
    },
    SET_ROLES: (state, roles) => {
      state.roles = roles
    },
    SET_PERMISSIONS: (state, permissions) => {
      state.permissions = permissions
    },
    // SET_PASSWORD:(state,Password)=>{
    //   state.Password=Password
    // }
  },

  actions: {
    /*
    dispatch:异步操作,写法:this.$store.dispatch('actions方法名',值)
    如:this.$store.dispatch('login',res.data)
    */
    // 登录
    Login({ commit }, userInfo) {
      return new Promise((resolve) => {
        const { email, password } = userInfo
        getLogin({ email, password }).then(res => {
          const analysis = JSON.parse(atob(res.data.split('.')[1]))
          setToken('token', res.data)
          setToken('userId', analysis.userId)
          setToken('email', email)
          setToken('password', password)

          commit('SET_TOKEN', res.data)
          setToken('Admin-Token', res.data)  
          resolve()
        })
      })
    },

    // 获取用户信息
    GetInfo({ commit }) {
      return new Promise((resolve) => {
        commit('SET_PERMISSIONS', [1])
        commit('SET_ROLES', ['ROLE_DEFAULT'])
        resolve()
        // getInfo({token: sessionStorage.getItem('JWT')})
        //  .then(result => {
        //   const res = result.data;
        //   const userName = res.userName;
        //   if (res.permissionCodeList 
        //      && res.permissionCodeList.length > 0) 
        //   { // 验证返回的roles是否是一个非空数组
        //     commit("SET_PERMISSIONS", res.permissionCodeList);
        //   } else {
        //     commit("SET_ROLES", ["ROLE_DEFAULT"]);
        //   }
        //   commit("SET_NAME", userName);
        //   resolve(res);
        // }).catch(error => {
        //   reject(error);
        // });
      })
    },

    // 退出系统
    // LogOut({ commit, state }) {
    //   return new Promise((resolve, reject) => {
    // logout(state.token).then(() => {
    //   commit('SET_TOKEN', '')
    //   commit('SET_ROLES', [])
    //   commit('SET_PERMISSIONS', [])
    //   removeToken()
    //   resolve()
    // }).catch(error => {
    //   reject(error)
    // })
    // })
    // },

    // 前端 登出
    FedLogOut({ commit }) {
      return new Promise(resolve => {
        commit('SET_TOKEN', '')
        removeToken('Admin-Token')
        removeToken('token')
        removeToken('password')
        removeToken('email')
        removeToken('userId')
        resolve()
      })
    }
  }
}

export default user
另:安装js-cookie :

1、方式一:在你的工程项目中使用npm进行安装

 npm install js-cookie --save

2、方式二:直接使用cdn资源

<script 
    src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js">
</script>

3、方式三:本地下载js-cookie的文件,然后进行项目script标签引入:

<script src="/path/to/js.cookie.js"></script>

src 文件夹下utils文件夹下auth.js内容:

//直接抛出,使用的时候直接引入 
//如:import { setToken, removeToken } from '@/utils/auth'
import Cookies from 'js-cookie'

// 60秒 * 60分钟 * 24小时
function expires(seconds = 60 * 60 * 24) {
  return new Date(new Date() * 1 + seconds * 1000)
}

export function getToken(TokenKey) {
  return Cookies.get(TokenKey)
}

export function setToken(TokenKey, token, seconds) {
  return Cookies.set(TokenKey, token, { expires: expires(seconds) })
}

export function removeToken(TokenKey) {
  return Cookies.remove(TokenKey)
}

使用

//点击登录
getLogin(){
            this.$store.dispatch('Login', {
               email: this.data.Email, password: this.data.Password 
            }).then(() => {
              this.$router.push({ path: this.redirect || '/Home' })
                .catch(() => {
              })
            })
         },
//点击退出           
logOut(){
        this.$store.dispatch('FedLogOut')
        this.$router.push({path:"/"})
      },

使用下面这两种方法存储数据:

commit:同步操作,写法:this.$store.commit('mutations方法名',值)

如:this.$store.commit('SET_PASSWORD',data.Password)

dispatch:异步操作,写法:this.$store.dispatch('actions方法名',值)

如:this.$store.dispatch('login',res.data)

到了这里,关于vue中vuex的五个属性和基本用法,另加js-cookie的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vuex 的基本用法

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用 集中式存储管理 应用的所有组件的状态, 这个状态管理应用包含以下几个部分: state,驱动应用的数据源; view,以声明方式将 state 映射到视图; actions,响应在 view 上的用户输入导致的状态变化。 给出一张官方的

    2024年02月11日
    浏览(26)
  • STM32的五个时钟源

    ①HSI是高速内部时钟,RC振荡器,频率为8MHz。   ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤PLL为锁相环倍频输出,其时钟输入源

    2024年02月11日
    浏览(43)
  • 【MySQL】常用的五个聚合函数

    聚合函数 ,也称聚集函数或分组函数,它是 对一组数据进行汇总 的函数,输入的是一组数据的集合,输出的是单个值。 AVG() :求平均值 SUM() 求总和 MAX() :求最大值 MIN() :求最小值 COUNT() :求个数 3.1 AVG() / SUM() 适用于数值类型。 如:查询员工表的平均工资 操作对象的数据

    2024年02月15日
    浏览(45)
  • 提升云计算安全的五个策略

    携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情 如何提升多云安全,这篇文章提供五个策略! 如果你使用多个云的可用性,你需要确保你在所有的云中使用相同的安全设置。你可以使用自动化工具来同步供应商之间的策略和设

    2024年02月16日
    浏览(42)
  • 防火墙的五个主要功能

    防火墙的五个主要功能 1、网络安全的保障 一个防火墙(作为阻塞点、控制点)能极大地提高一个内部网络的安全性,并通过过滤不安全的服务而降低风险。由于只有经过精心选择的应用协议才能通过防火墙,所以网络环境变得更安全。 如防火墙可以禁止诸如众所周知的不安

    2024年02月09日
    浏览(48)
  • ADC前端电路的五个设计步骤

    现代通信系统和测试设备常常需要尽快地将模拟信号数字化,以便在数字域中完成信号处理。但是,为模数转换器(ADC)设计变压器前端电路很有挑战性,特别是在高中频(IF)的系统中。本文总结了5个设计步骤,以帮助开发出的ADC前端。这5个步骤包括:1. 了解系统和设计要求;

    2024年02月05日
    浏览(45)
  • 建立人力资源运营团队的五个步骤

    作为小企业主,设置人力资源运营可能不是您的首要任务。但是,随着您扩大运营规模和员工人数,您可能会遇到合规性和员工敬业度问题,从而阻碍您的业务增长。组建一个团队来照顾您的人力资源运营和员工可以让您专注于改进您的产品和满足客户需求。  如果您是希望

    2023年04月18日
    浏览(41)
  • 关于边缘计算的五个实用案例与优势

    在数据传输、实时应用和低延迟需求的推动,边缘计算和云计算已经逐渐取代了传统的计算机架构模式。边缘计算作为云计算的延申,是在边缘侧布置数据计算功能,筛选过滤数据,从而达到降低延迟、提高性能的作用,其作用是拉近用户设备与数据的距离。 边缘计算的四个

    2024年01月21日
    浏览(51)
  • 交易之路:从无知到有知的五个阶段

    交易是易学的,它的操作很直观,也是复杂的,它的价格很玄妙。 在金融行业日益壮大的背景下,新人辈出,而弱者则逐渐退出。市场生态在不断变化,我们每个人在交易之路上所经历的种种,既清晰可见又模糊难辨。那么,面对这样的生存之道,我们应该如何看待并坚持下

    2024年02月21日
    浏览(36)
  • 人工智能在农业领域的五个应用案例

    随着科技的进步,人工智能(Artificial Intelligence,AI)正逐渐渗透到各个行业中,其中包括农业领域。本文介绍人工智能在农业领域的五个应用案例,以期帮助大家更好地了解这个新兴技术在农业中的价值和作用。       人工智能技术可以应用于农机,使其具备自主感知、

    2024年02月03日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包