У меня есть код на Blade Laravel, и он содержит @foreach. Как я могу перенести этот код блейда в .vue Inertia? Я пытался отправить свои данные в массив vue, но это плохая идея, или я идиот :(
Код index.blade.php:
<x-app-layout>
<x-slot name = "header">
<h2 class = "font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
{{ __('Appl to staff') }}
</h2>
</x-slot>
@if (Session::has('success'))
<div class = "bg-lime-500 light:bg-lime-500 overflow-hidden shadow-sm sm:rounded-lg text-black text-center font-semibold">
{{ Session::get('success') }}
</div>
@endif
<div class = "py-12">
<div class = "max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class = "bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
<div class = "p-6 text-gray-900 dark:text-gray-100">
@foreach ($staff as $appl_to_staff)
<p>surname: {{ $appl_to_staff->surname}} </p>
<p>name: {{ $appl_to_staff->name}} </p>
<p>patronymic: {{ $appl_to_staff->patronymic}} </p>
<p>dob: {{ $appl_to_staff->dob}}</p>
<p><a class = "font-bold" href = "{{ route('staff.show', $appl_to_staff->id) }}">{{ __('More..') }}<a></p>
<br>
@endforeach
</div>
</div>
</div>
</div>
</x-app-layout>
Код index.vue:
<script setup>
import Welcome from '@/Components/Welcome.vue';
import AppLayout from '@/Layouts/AppLayout.vue';
import { Link } from '@inertiajs/vue3';
</script>
<template>
<AppLayout title = "Staff">
<template #header>
<h2 class = "font-semibold text-xl text-gray-800 leading-tight">
Staff
</h2>
</template>
<div class = "py-12">
<div class = "max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class = "bg-white overflow-hidden shadow-xl sm:rounded-lg">
<div class = "p-6 text-gray-900 dark:text-gray-100">
@foreach ($staff as $appl_to_staff)
<p>surname: {{ $appl_to_staff.surname}} </p>
<p>name: {{ $appl_to_staff.name}} </p>
<p>patronymic: {{ $appl_to_staff.patronymic}} </p>
<p>dob: {{ $appl_to_staff.dob}}</p>
<p><Link class = "font-bold text-blue-600" href = "{{ route('staff.show', $appl_to_staff->id) }}">{{ __('Подробнее..') }}</Link></p>
<br>
@endforeach
</div>
</div>
</div>
</div>
</AppLayout>
</template>
Контроллер
class StaffController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$staff = Staff::all();
return Inertia::render('Staff/Index', ['staff'=> $staff]);
}
Index.vue при редактировании:
<script setup>
import Welcome from '@/Components/Welcome.vue';
import AppLayout from '@/Layouts/AppLayout.vue';
import { Link } from '@inertiajs/vue3';
</script>
<template>
<AppLayout title = "Staff">
<template #header>
<h2 class = "font-semibold text-xl text-gray-800 leading-tight">
Staff
</h2>
</template>
<div class = "py-12">
<div class = "max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class = "bg-white overflow-hidden shadow-xl sm:rounded-lg">
<div class = "p-6 text-gray-900 dark:text-gray-100">
<tr v-for = "appl_to_staff in staff">
<td>surname: {{ appl_to_staff.surname}} </td>
<td>name: {{ appl_to_staff.name}} </td>
<td>patronymic: {{ appl_to_staff.patronymic}} </td>
<td>dob: {{ appl_to_staff.dob}}</td>
<td><Link class = "font-bold text-blue-600" href = "{{ route('staff.show', $appl_to_staff->id) }}">{{ __('Подробнее..') }}</Link></td>
<br>
</tr>
</div>
</div>
</div>
</div>
</AppLayout>
</template>
Если вы хотите увидеть больше другого кода, напишите мне в комментариях, и я отправлю или отредактирую сообщение. Спасибо!
@Джозеф, я просматриваю документацию перед твоим комментарием, но, похоже, я глуп, потому что оттуда не понимаю, что такое foreach. Не могли бы вы уточнить для меня, пожалуйста?
у них нет foreach в буквальном смысле, но оно позвонило v-for = "appl_to_staff in staff"
@Джозеф, я тестирую, но не работает :( может ошибка в контроллере?






Вам необходимо определить входящие реквизиты от контроллера в вашем коде Vue. Выглядеть это будет примерно так (ссылка)
<script setup>
import Welcome from '@/Components/Welcome.vue';
import AppLayout from '@/Layouts/AppLayout.vue';
import { Link } from '@inertiajs/vue3';
defineProps({ staff: Array })
</script>
Тогда приведенный выше код должен работать. Просто не забудьте также добавить ключ для цикла, чтобы он выглядел так (ссылка)
<tr v-for = "appl_to_staff in staff" :key = "appl_to_staff.id"></tr>
Спасибо! Я думаю, что я все сделал раньше, но моя <ссылка> будет плохой. Я починил это. Спасибо!
Ознакомьтесь с этой частью документации, чтобы узнать, как зациклиться на vuejs.