Laravel Inertia JS Flash-Meldung wird nur einmal angezeigt
P粉852578075
P粉852578075 2023-11-03 12:33:50
0
1
770

Da InertiaJS nicht dieselbe Routenkomponente aktualisiert, werden Dinge wie Flash-Nachrichten nur einmal angezeigt, unabhängig davon, wie oft Sie die Nachricht vom Backend übergeben. Ich habe alles versucht, aber nichts hat funktioniert. Alles, was ich brauche, ist, die gleiche Flash-Meldung erneut auszulösen, nachdem ich das Gleiche nicht getan habe.

Controller: Dies sollte im Rahmen meiner Validierung über einige if-Anweisungen ausgelöst werden. Im Grunde sage ich also, dass diese Flash-Meldung zurückgegeben wird, wenn die angeforderte Menge die Lagermenge überschreitet.

                    return back()->with([
                        'error' => 'This item has only ' . $item->qty . ' items in stock'
                    ]);

Flash-Komponente:

<script setup>
import { ref, onMounted } from "vue";
defineProps({
    message: Object,
});

const showNotif = ref(false);

let msgs = ref([]);

onMounted(() => {
    showNotif.value = true;
    setTimeout(() => {
        showNotif.value = false;
    }, 6000);
});
</script>

<template>
    <div>
        <Transition
            mode="out-in"
            name="flash"
            tag="div"
            enter-active-class="animate__animated animate__fadeInUp"
            leave-active-class="animate__animated animate__fadeOutDown"
            appear
        >
            <p
                v-if="message.error && showNotif"
                class="cursor-pointer fixed bottom-3 right-3 bg-red-600 px-5 py-1 font-semibold text-white rounded-xl"
            >
                {{ message.error }}
            </p>
        </Transition>
        <Transition
            mode="out-in"
            name="flash"
            tag="div"
            enter-active-class="animate__animated animate__fadeInUp"
            leave-active-class="animate__animated animate__fadeOutDown"
            appear
        >
            <p
                v-if="message.success && showNotif"
                class="cursor-pointer fixed bottom-3 right-3 bg-green-600 px-5 py-1 font-semibold text-white rounded-xl"
            >
                {{ message.success }}
            </p>
        </Transition>
    </div>
</template>

Das funktioniert einwandfrei, der Blitz erscheint, dauert ein paar Sekunden und verschwindet dann. Aber egal wie oft ich auf die gleiche Schaltfläche klicke, um diese Flash-Nachricht zu erhalten, es passiert nie und mein Gehirn ist kurz davor zu explodieren!

P粉852578075
P粉852578075

Antworte allen(1)
P粉201448898

此处的文档中,您必须寻找app /Http/Middleware/HandleInertiaRequests.php 并确保你有这样的东西。

class HandleInertiaRequests extends Middleware
{
    public function share(Request $request)
    {
        return array_merge(parent::share($request), [
            'flash' => [
                'error' => fn () => $request->session()->get('error')
            ],
        ]);
    }
}

基本上,您正在创建一个名为 flash 的共享数据属性,它是一个带有消息键的关联数组(对象)。

请注意,如果您使用with(['error => 'message here']),您将只能在前端获取数据。如果您想要成功,您还必须自行添加它。

您将获得的数据示例

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage