增加退出功能
1). 添加退出功能
打开 src/store/index.js
文件,在 actions
添加退出事件 logout
:
src/store/index.js
1 const actions = { 2 login({ commit }, user) { 3 if (user) commit('UPDATE_USER', user) 4 commit('UPDATE_AUTH', true) 5 router.push('/') 6 }, 7 logout({ commit }) { 8 commit('UPDATE_AUTH', false) 9 router.push({ name: 'Home', params: { logout: true } }) 10 } 11 }
退出的时候,我们将 auth
状态更改为未登录,并跳转到首页。在路由 push
方法的第一个参数使用对象,可以添加更多的配置。我们这里指定跳转目标的名称为 Home
,对应 src/router/index.js
下 name
为 Home
的路由。同时,我们传了一个 logout
参数,当首页获取到该参数时,就显示一个操作成功的提示。
2). 绑定退出事件
1、打开 src/components/layouts/TheEntry.vue
文件,添加退出方法 logout
(注释部分是涉及的修改):
src/components/layouts/TheEntry.vue
1 <script> 2 import { mapState } from 'vuex' 3 4 export default { 5 name: 'TheEntry', 6 computed: { 7 ...mapState([ 8 'auth', 9 'user' 10 ]) 11 }, 12 // 添加 methods 选项,并添加 logout 方法 13 methods: { 14 logout() { 15 this.$store.dispatch('logout') 16 } 17 } 18 } 19 </script>
点击退出后,我们通过调用 this.$store.dispatch('logout')
来完成退出。
2、查找 <ul class="dropdown-menu">
,在退出链接上添加 @click="logout"
:
src/components/layouts/TheEntry.vue
1 <ul class="dropdown-menu"> 2 <li><a href="javascript:;" @click="logout"><i class="fa fa-sign-out text-md"></i>退出</a></li> 3 </ul>
3). 添加退出成功提示
打开 src/views/Home.vue
文件,复制以下代码替换原 <script>
:
src/views/Home.vue
1 <script> 2 export default { 3 name: 'Home', 4 data() { 5 return { 6 msg: '', // 消息 7 msgType: '', // 消息类型 8 msgShow: false // 是否显示消息,默认不显示 9 } 10 }, 11 beforeRouteEnter(to, from, next) { 12 const fromName = from.name 13 const logout = to.params.logout 14 15 next(vm => { 16 if (vm.$store.state.auth) { 17 switch (fromName) { 18 case 'Register': 19 vm.showMsg('注册成功') 20 break 21 } 22 } else if (logout) { 23 vm.showMsg('操作成功') 24 } 25 }) 26 }, 27 computed: { 28 auth() { 29 return this.$store.state.auth 30 } 31 }, 32 watch: { 33 auth(value) { 34 if (!value) { 35 this.showMsg('操作成功') 36 } 37 } 38 }, 39 methods: { 40 showMsg(msg, type = 'success') { 41 this.msg = msg 42 this.msgType = type 43 this.msgShow = true 44 } 45 } 46 } 47 </script>
我们这里需要处理退出的两种情况。
从其他页面退出时,我们通过路由参数 logout
来判断是否显示提示:
1 beforeRouteEnter(to, from, next) { 2 const fromName = from.name 3 // 获取 logout 参数 4 const logout = to.params.logout 5 6 next(vm => { 7 if (vm.$store.state.auth) { 8 switch (fromName) { 9 case 'Register': 10 vm.showMsg('注册成功') 11 break 12 } 13 } else if (logout) { 14 // logout 返回 true 时,显示操作成功提示 15 vm.showMsg('操作成功') 16 } 17 }) 18 }
从首页退出时,路由未改变,beforeRouteEnter
不会被调用,我们通过侦听 auth
来判断是否显示提示:
1 computed: { 2 // 用户登录状态 3 auth() { 4 return this.$store.state.auth 5 } 6 }, 7 watch: { 8 // 监听 auth,它的值变为 false 时,显示操作成功提示 9 auth(value) { 10 if (!value) { 11 this.showMsg('操作成功') 12 } 13 } 14 },
一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;