[前端]-Vue项目中, 记录用户关闭最后一个tab页面,利用本地localStorage

在页面初始化打开时, 会执行到window.onload属性, 所以监听这个方法

在这里插入图片描述

注意直接在 App.vue 根组件中区记录

在项目中打开新的页面时就会触发这个方法, 使这个 count 值 +1, 并且在页面销毁时, 触发onbeforeunload方法, 立即 count -1 , 计算标签页面数量

	// localStorage记录标签页
	window.onload = function () {
		// 为了防止出现其他意外的值,我们事先清空这个字段的值, 所以需要做一个判断
		if (isNaN(localStorage.getItem('tabCount')){
			localStorage.removeItem('tabCount')
		}
		var count = localStorage.getItem('tabCount') || 0
		localStorage.setItem('tabCount', parseInt(count) + 1)
	}
	// 删除标签页数量
	window.onbeforeunload = function () {
		var count = localStorage.getItem('tabCount') || 0
		count = parseInt(count) - 1
		if (count <= 0) {
			console.log('前端发出登出请求....')
			// 关闭最后一个标签页,发送登出请求
			localStorage.setItem('tabCount', 0) // 重置计数器

			// !如果需要发接口记录, 执行登出请求 (必须在onbeforeunload阶段执行)
			logout()
				.then((res) => {
					console.log('记录用户退出 res => ', res)
					this.$store.commit('SET_TOKEN', '')
					this.$store.commit('SET_ROLES', [])
					removeToken()
					resetRouter()
					this.$store.dispatch('tagsView/delAllViews', null, { root: true })
				})
				.catch((err) => {
					console.log('err', err)
				})

			// 后端记录登出接口
			// userLoginOut()
			// 	.then((res) => {
			// 		console.log('记录用户退出 res => ', res)
			// 	})
			// 	.catch((err) => {
			// 		console.log('err', err)
			// 	})
		} else {
			localStorage.setItem('tabCount', count)
		}
	}

最终我们把这个事件, 封装到方法中, 并在 App.vue 中使用

	created() {
		this.recordUserLogout()
	},


	methods:{
		// 页面销毁时处理记录用户退出
		recordUserLogout() {
			// localStorage记录标签页
			window.onload = function () {
				if (isNaN(localStorage.getItem('tabCount'))){
					localStorage.removeItem('tabCount')
				}
				var count = localStorage.getItem('tabCount') || 0
				localStorage.setItem('tabCount', parseInt(count) + 1)
			}
			// 删除标签页数量
			window.onbeforeunload = function () {
				var count = localStorage.getItem('tabCount') || 0
				count = parseInt(count) - 1
				if (count <= 0) {
					console.log('前端发出登出请求....')
					// 关闭最后一个标签页,发送登出请求
					localStorage.setItem('tabCount', 0) // 重置计数器

					logout()
						.then((res) => {
							this.$store.commit('SET_TOKEN', '')
							this.$store.commit('SET_ROLES', [])
							removeToken()
							resetRouter()
							this.$store.dispatch('tagsView/delAllViews', null, { root: true })
						})
						.catch((err) => {
							console.log('err', err)
						})

					// 后端记录登出接口
					// userLoginOut()
					// 	.then((res) => {
					// 		console.log('记录用户退出 res => ', res)
					// 	})
					// 	.catch((err) => {
					// 		console.log('err', err)
					// 	})
				} else {
					localStorage.setItem('tabCount', count)
				}
			}
		}
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年东九

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值