Heim > Fragen und Antworten > Hauptteil
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粉2014488982023-11-04 00:11:02
从此处的文档中,您必须寻找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'])
,您将只能在前端获取数据。如果您想要成功
,您还必须自行添加它。