欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Vue监听页面刷新和关闭功能

程序员文章站 2022-11-23 23:13:29
我在做项目的时候,有一个需求,在离开(跳转或者关闭)购物车页面或者刷新购物车页面的时候向服务器提交一次购物车商品数量的变化。 将提交的一步操作放到 beforedestr...

我在做项目的时候,有一个需求,在离开(跳转或者关闭)购物车页面或者刷新购物车页面的时候向服务器提交一次购物车商品数量的变化。

将提交的一步操作放到 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监听页面刷新和关闭功能,希望对大家有所帮助