Когда я работал над проектом, у меня было требование отправить изменение количества товаров в корзине на сервер, когда я покидал (переходил или закрывал) страницу корзины или обновлял страницу корзины.
Поместите отправленную асинхронную операцию в функцию ловушки beforeDestroy.
beforeDestroy() {
console.log('销毁组件')
this.finalCart()
},
Однако было обнаружено, что beforeDestroy может отслеживать только переходы между страницами, но не может отслеживать обновления страниц и закрытие вкладок.
Так что все еще используйтеonbeforeunloadсобытие.
Кстати, обзор некоторых событий загрузки и выгрузки в JavaScript:
- Выполнять только при загрузке страницы
onloadсобытие. - Когда страница закрыта, сначала
onbeforeunloadсобытие, опять жеonunloadсобытие.
- Выполнять первым при обновлении страницы
onbeforeunloadсобытие, тоonunloadсобытие, последнееonloadсобытие.
Мониторинг обновления страницы и закрытие в Vue
1. Определите метод события в методах:
methods: {
beforeunloadFn(e) {
console.log('刷新或关闭')
// ...
}
}
2. Привязать события к созданным или смонтированным хукам жизненного цикла
created() {
window.addEventListener('beforeunload', e => this.beforeunloadFn(e))
}
3. Выгрузить событие в уничтоженном хуке
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() {
// ...
}
}