Inertia предоставляет систему событий, которая позволяет Вам «подключаться» к различным событиям жизненного цикла библиотеки.
Чтобы зарегистрировать прослушиватель событий, используйте метод Inertia.on()
.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('start', (event) => {
console.log(`Starting a visit to ${event.detail.visit.url}`)
})
Inertia использует собственные события браузера, так что Вы также можете работать с ними таким же образом. Просто не забудьте добавить inertia:
к имени события.
document.addEventListener('inertia:start', (event) => {
console.log(`Starting a visit to ${event.detail.visit.url}`)
})
Когда Вы регистрируете прослушиватель событий, Inertia автоматически возвращает Вам обратный вызов для удаления прослушивателя событий.
let removeStartEventListener = Inertia.on('start', (event) => {
console.log(`Starting a visit to ${event.detail.visit.url}`)
})
// Удалить слушателя
removeStartEventListener()
В сочетании с обработанной ловушкой Вы можете автоматически удалить прослушиватель событий при переходе на другую страницу.
export default {
mounted() {
this.$once(
'hook:destroyed',
Inertia.on('start', (event) => {
console.log(`Starting a visit to ${event.detail.visit.url}`)
})
)
},
}
В качестве альтернативы, если Вы используете собственные события браузера, Вы можете удалить прослушиватель событий, используя removeEventListener()
.
let startEventListener = (event) => {
console.log(`Starting a visit to ${event.detail.visit.url}`)
}
document.addEventListener('inertia:start', startEventListener)
// Удалить слушателя
document.removeEventListener('inertia:start', startEventListener)
Некоторые события (before
, invalid
, error
) поддерживают отмену, что позволяет предотвратить поведение Inertia по умолчанию. Как и в случае с собственными событиями, если только один прослушиватель событий вызывает event.preventDefault()
, событие будет отменено.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('before', (event) => {
if (!confirm('Are you sure you want to navigate away?')) {
event.preventDefault()
}
})
Для удобства, если Вы зарегистрируете свой слушатель событий с помощью Inertia.on()
, Вы также можете отменить событие, вернув из слушателя false
.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('before', (event) => {
return confirm('Are you sure you want to navigate away?')
})
Событие before
срабатывает, когда собирается запрос к серверу. Это полезно для перехвата посещений.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('before', (event) => {
console.log(`About to make a visit to ${event.detail.visit.url}`)
})
Основная цель этого мероприятия - позволить Вам предотвратить посещение.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('before', (event) => {
return confirm('Are you sure you want to navigate away?')
})
Событие start
срабатывает при запуске запроса к серверу. Это полезно для отображения индикаторов загрузки.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('start', (event) => {
console.log(`Starting a visit to ${event.detail.visit.url}`)
})
Событие start
не отменяется.
Событие progress
запускается по мере увеличения прогресса во время загрузки файлов.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('progress', (event) => {
this.form.progress = event.detail.progress.percentage
})
Событие progress
не может быть отменено.
Событие success
запускается при успешном посещении страницы, если нет ошибок проверки. Обратите внимание, что это не исторические посещения.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('success', (event) => {
console.log(`Successfully made a visit to ${event.detail.page.url}`)
})
Событие success
не может быть отменено.
Событие error
возникает, когда при "успешных" посещениях страницы присутствуют ошибки проверки.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('error', (errors) => {
console.log(errors)
})
Событие error
не отменяется.
Событие invalid
запускается, когда от сервера получен не-Inertia ответ, такой как html
или json
ответ. Допустимый ответ Inertia - это ответ, у которого заголовок X-Inertia
установлен в значение true
с полезной нагрузкой json
, содержащей объект страницы.
Это событие запускается для всех типов ответов, включая коды ответов 200
, 400
и 500
.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('invalid', (event) => {
console.log(`Получен неверный ответ инерции.`)
console.log(event.detail.response)
})
Отмените событие invalid
, чтобы Inertia не отображала режим ответа, отличного от Inertia.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('invalid', (event) => {
event.preventDefault()
// Самостоятельно обработайте неверный ответ
})
Событие exception
запускается при непредвиденных ошибках XHR, таких как прерывания сети, и при ошибках, сгенерированных в обратном вызове resolveComponent()
.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('exception', (event) => {
console.log(`Непредвиденная ошибка во время посещения Inertia.`)
console.log(event.detail.error)
})
Отмените событие exception
, чтобы предотвратить возникновение ошибки.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('exception', (event) => {
event.preventDefault()
// Устраните ошибку самостоятельно
})
Обратите внимание, что это событие не срабатывает для запросов XHR, которые получают ответы уровня 400
и 500
, или для неинерционных ответов, поскольку эти ситуации обрабатываются другими способами с помощью Inertia. См. страницу обработка ошибок для получения дополнительной информации.
Событие finish
запускается после завершения запроса XHR как для успешных, так и для неуспешных ответов. Это событие полезно для скрытия индикаторов загрузки.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('finish', (event) => {
NProgress.done()
})
Событие finish
не может быть отменено.
Событие navigate
запускается при успешных посещениях страницы, а также при навигации по истории. Это событие полезно для отслеживания аналитики и тому подобного.
import { Inertia } from '@inertiajs/inertia'
Inertia.on('navigate', (event) => {
console.log(`Переход к ${event.detail.page.url}`)
})
Событие navigate
не может быть отменено.
В дополнение к глобальным событиям, Inertia также предоставляет ряд обратных вызовов событий при ручном выполнении посещений Inertia.