我在做项目的时候,有一个需求,在离开(跳转或者关闭)购物车页面或者刷新购物车页面的时候向服务器提交一次购物车商品数量的变化。
将提交的一步操作放到 beforeDestroy 钩子函数中。
beforeDestroy() { console.log('销毁组件') this.finalCart()},
但是发现 beforeDestroy 只能监听到页面间的跳转,无法监听到页面刷新和关闭标签页。
所以还是要借助 onbeforeunload 事件。
顺便复习了一下 JavaScript 中的一些加载,卸载事件:
- 页面加载时只执行 onload 事件。
- 页面关闭时,先 onbeforeunload 事件,再 onunload 事件。
- 页面刷新时先执行 onbeforeunload 事件,然后 onunload 事件,最后 onload 事件。
Vue中监听页面刷新和关闭
1. 在methods中定义事件方法:
methods: { beforeunloadFn(e) { console.log('刷新或关闭') // ... } }
2. 在created 或者 mounted 生命周期钩子中绑定事件
created() { window.addEventListener('beforeunload', e => this.beforeunloadFn(e)) }
3. 在 destroyed 钩子卸载事件
destroyed() { window.removeEventListener('beforeunload', e => this.beforeunloadFn(e)) }
测试了页面刷洗和关闭都能监听到。
回到我自己的项目,可以使用 onbeforeunload 事件和 beforeDestroy 钩子函数结合:
created() { this.initCart() window.addEventListener('beforeunload', this.updateHandler) }, beforeDestroy() { this.finalCart() // 提交购物车的异步操作}, destroyed() { window.removeEventListener('beforeunload', this.updateHandler)}, methods: { updateHandler() { this.finalCart() }, finalCart() { // ... } }
总结
以上所述是小编给大家介绍的Vue监听页面刷新和关闭功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。