Это то, что я в итоге сделал.
Сначала я создал новое свойство на маршрутизаторе, чтобы я мог установить его, когда пользователь нажимает кнопку «назад» или «вперед»
в моем router.vue у меня есть это
router.beforeEach((to, from, next) => {
if (router.isNavigating) {
router.isNavigating = false
}
else {
history.pushState(null, '')
}
next()
})
router['isNavigating'] = false
router['direction'] = false
Затем в моем шаблоне у меня есть это.
<div class="go-back-container">
<div class="go-back-button" v-html="arrowLeftSVG" @click="go(0)"></div>
<div class="history-text">back</div>
</div>
<div class="forward-container" :class="$root.forwardEntries !== 0 ? '' : 'dim'" v-show="!isMobile">
<div class="forward-button" v-html="arrowLeftSVG" @click="go(1)"></div>
<div class="history-text">forward</div>
</div>
И, наконец, в моем смонтированном хуке main.js у меня есть:
var pushState = history.pushState
history.pushState = function (state) {
// create an onpushstate listener
pushState.apply(history, arguments)
if (typeof history.onpushstate === 'function') {
history.onpushstate({ state: state })
}
}
window.history.onpushstate = (e) => {
this.forwardEntries = 0
// if we are pushing state, then we know that the user
// has navigated forward in history
// so we know that the user can't go forward
}
window.onpopstate = (e) => {
if (router.direction === 'back') {
console.log('back')
this.forwardEntries++
}
else if (router.direction === 'forward') {
console.log('forward')
this.forwardEntries--
}
}