Flash с клиента в Inertia
Скажем, человек нажал «Copy link»
на карточке поста, и нужно
сразу показать короткую надпись
об успехе, хотя Laravel
на этот клик не вызывали.
Ждать следующего визита
или заводить отдельный
локальный ref только ради
такой подсказки неудобно:
flash-данные уже живут
в page.flash и умеют
исчезать при следующем заходе.
Давайте изучим метод
flash у router.
Он дописывает flash-данные
на клиенте без запроса.
Можно передать ключ и значение,
объект полей или функцию,
которая получает текущий
flash и возвращает новый.
Значения сливаются
с уже лежащими в
page.flash.
Давайте отдадим страницу одного поста:
<?php
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
Route::get('/posts/1', function () {
return Inertia::render('Posts/Show', [
'title' => 'Sample post',
]);
});
?>
Давайте по кнопке запишем
flash-сообщение и выведем
его из usePage:
<script setup>
import { router, usePage } from '@inertiajs/vue3'
defineProps({
title: String,
})
const page = usePage()
function copyLink() {
router.flash('toast', {
message: 'Link copied.',
})
}
</script>
<template>
<h1>{{ title }}</h1>
<button type="button" @click="copyLink">
Copy link
</button>
<p v-if="page.flash.toast">
{{ page.flash.toast.message }}
</p>
</template>
Сделайте карточку работника Paul так, чтобы после копирования номера на экране появлялось flash-сообщение без похода на сервер.