Если бы это было Vue. js, вы могли бы сделать именно это, то есть установить для свойства loading
значение true
перед началом длительной задачи и переключить его обратно на false
после того, как оно было выполнено. К сожалению, поскольку Livewire работает на сервере, все происходит синхронно, поэтому к тому времени, когда запрос вернется, задача уже будет завершена.
То, что я закончил, - это снова обратиться к Alpine. js. Добавьте следующее к root вашего компонента Alpine:
x-data="{ date_range_is_loading: false }"
x-init="
const alpine = this;
document.addEventListener('livewire:load', () => {
window.livewire.on('dateRangeChanged', () => alpine.date_range_is_loading = true);
});
"
Если вы хотите прослушивать отправку действия Livewire, вы можете добавить слушателя для ловушки messageSent
.
window.livewire.hook('messageSent', (_, message) => message.actionQueue.forEach(a => {
if (a.type == 'callMethod' && a.payload.method == 'myAction') {
alpine.date_range_is_loading = true; // Or whatever you need to do
}
}))