vue2.0使用vuex store保存登录用户名并显示到页面中且在页面中进行更改

vue2.0使用vuex store保存登录用户名并显示到页面中且在页面中进行更改

step1: 在Vuex Store中设置状态state和mutation(更改状态的方法)

// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state = {
  username: localStorage.getItem('username') || '', // 获取本地存储的用户名,如果没有则为空字符串
}

const mutations = {
  SET_USERNAME(state, username) {
    state.username = username;
    localStorage.setItem('username', username); // 更新localStorage中的用户名
  },
}
export default new Vuex.Store({
  state,
  mutations,
})

step2: 创建一个getter获取用户名(可选,但推荐,便于组件中直接调用)

// getters.js
export const getUsername = state => state.username;

step3: 在组件中展示用户名(Vue组件中,需要注入store,并在计算属性或挂载钩子中获取state中的用户名,并将其绑定到视图上)

// Header.vue 或需要显示用户名的任何组件
<template>
  <div>
    <input v-model="currentUsername" @change="updateUsername" placeholder="请输入用户名">
    <!-- 显示用户名 -->
    <p>当前用户名:{{ displayedUsername }}</p>
  </div>
</template>

<script>
import { mapState, mapGetters } from 'vuex';

export default {
  computed: {
    ...mapState(['username']), // 直接映射state中的username
    ...mapGetters(['getUsername']), // 如果你定义了getter也可以使用
    displayedUsername: {
      get() {
        return this.getUsername; // 或者 this.username;
      }
    },
  },
  data() {
    return {
      currentUsername: this.getUsername, // 初始时将用户名赋值给输入框
    };
  },
  methods: {
    updateUsername() {
      this.$store.commit('SET_USERNAME', this.currentUsername); // 用户名更改后提交mutation更新状态
    },
  },
};
</script>

当在页面上更改currentUsername时,通过@change事件触发updateUsername方法,该方法会提交一个mutation来更新Vuex Store中的用户名,同时这个新的用户名会被同步到localStorage。 页面上的显示部分也会随之自动更新,因为它们与store的状态是绑定的。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2.0 使用 Vuex 实现登录,可以将登录状态和用户信息存储Vuexstore ,以便在应用的任何地方都可以访问和使用。 下面是一个简单的示例代码: 1. 创建 store.js 文件,定义 store 的 state、mutations 和 actions: ```javascript import Vue from 'vue' import Vuex from 'vuex' import axios from 'axios' Vue.use(Vuex) export default new Vuex.Store({ state: { isLoggedIn: false, user: {} }, mutations: { login (state, user) { state.isLoggedIn = true state.user = user }, logout (state) { state.isLoggedIn = false state.user = {} } }, actions: { login ({ commit }, { username, password }) { return axios.post('/api/login', { username, password }) .then(response => { const user = response.data.user localStorage.setItem('token', response.data.token) commit('login', user) return user }) }, logout ({ commit }) { localStorage.removeItem('token') commit('logout') } } }) ``` 2. 在登录页面使用 Vuex 的 mapActions 辅助函数将 login 方法映射到组件的 methods : ```html <template> <div> <input type="text" v-model="username" placeholder="请输入用户名"/> <input type="password" v-model="password" placeholder="请输入密码"/> <button @click="handleLogin">登录</button> </div> </template> <script> import { mapActions } from 'vuex' export default { data () { return { username: '', password: '' } }, methods: { ...mapActions(['login']), handleLogin () { this.login({ username: this.username, password: this.password }) .then(user => { // 登录成功,跳转到首页或其他页面 this.$router.push('/') }) .catch(error => { // 登录失败,提示错误信息 alert(error.response.data.message) }) } } } </script> ``` 3. 在应用的任何地方,都可以通过 Vuex 的 mapState 辅助函数或 $store.state 来访问登录状态和用户信息: ```html <template> <div> <p v-if="isLoggedIn">欢迎,{{ user.name }}!</p> <button v-if="isLoggedIn" @click="handleLogout">退出登录</button> </div> </template> <script> import { mapState, mapActions } from 'vuex' export default { computed: { ...mapState(['isLoggedIn', 'user']) }, methods: { ...mapActions(['logout']), handleLogout () { this.logout() .then(() => { // 退出登录成功,跳转到登录页面 this.$router.push('/login') }) } } } </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值