Heim >Web-Frontend >js-Tutorial >Implementierung von Infinite Scrolling mit Laravel, Inertia.js v und Vue 3
In diesem umfassenden Leitfaden erfahren Sie, wie Sie mit Inertia.js v2.0 und Vue 3 unendliches Scrollen in einer Laravel-Anwendung implementieren. Wir behandeln sowohl das Frontend als auch das Backend Implementierung, mit besonderem Augenmerk auf die Handhabung ganzer Seitenaktualisierungen und die Beibehaltung der Bildlaufposition.
Die Implementierung des unendlichen Scrollens basiert auf drei Hauptkomponenten:
Beginnen wir mit einer Vue-Komponente, die unendliches Scrollen für die Auflistung von Blogbeiträgen implementiert:
<script setup> import { computed } from 'vue' import { usePage, WhenVisible } from '@inertiajs/vue3' import LoadingSpinner from '@/components/LoadingSpinner.vue' import BlogPostCard from '@/components/BlogPostCard.vue' const page = usePage() const hasFeaturePost = computed(() => !!page.props.featuredPost) const categoryName = computed(() => page.props.category?.name) </script> <template> <div> <h3> Key Frontend Features </h3> <ol> <li><p><strong>WhenVisible Component</strong>: This component from Inertia.js v2.0 automatically triggers a request when the element becomes visible in the viewport.</p></li> <li><p><strong>Pagination Parameters</strong>:<br> </p></li> </ol> <pre class="brush:php;toolbar:false">:params="{ data: { page: page.props.postsPagination.current_page + 1, }, only: ['posts', 'postsPagination'], }"
Hier ist die Laravel-Controller-Implementierung, die sowohl reguläre Paginierungs- als auch ganzseitige Ladeszenarien verarbeitet:
<?php namespace App\Http\Controllers; use App\Models\Post; use App\Models\Category; use Illuminate\Pagination\LengthAwarePaginator; use Inertia\Inertia; class BlogController extends Controller { public function index(?Category $category = null) { return Inertia::render('Blog/Index', [ 'category' => $category, 'featuredPost' => $this->getFeaturedPost(), 'posts' => $this->getPaginatedPosts($category), 'postsPagination' => $this->getPaginatedPosts($category)?->toArray(), ]); } protected function getPaginatedPosts(?Category $category): ?LengthAwarePaginator { $currentPage = request()->input('page', 1); $perPage = request()->input('per_page', 12); $query = Post::query() ->with(['author', 'category']) ->published(); if ($category) { $query->where('category_id', $category->id); } // Apply any additional filters if (request()->has('sort')) { $query->orderBy(request()->input('sort'), request()->input('direction', 'desc')); } else { $query->latest(); } // Handle full page load vs. infinite scroll request if (!request()->header('X-Inertia')) { // Full page load - fetch all pages up to current $allResults = collect(); for ($page = 1; $page <= $currentPage; $page++) { $pageResults = $query->paginate($perPage, ['*'], 'page', $page); $allResults = $allResults->concat($pageResults->items()); } return new LengthAwarePaginator( $allResults, Post::query() ->published() ->when($category, fn($q) => $q->where('category_id', $category->id)) ->count(), $perPage, $currentPage ); } return $query->paginate($perPage); } protected function getFeaturedPost() { return Post::query() ->with(['author', 'category']) ->published() ->featured() ->latest() ->first(); } }
if (!request()->header('X-Inertia')) { // Full page load logic } else { // Regular pagination for infinite scroll }
for ($page = 1; $page <= $currentPage; $page++) { $pageResults = $query->paginate($perPage, ['*'], 'page', $page); $allResults = $allResults->concat($pageResults->items()); }
$query = Post::query() ->with(['author', 'category']) ->published();
Die Implementierung von unendlichem Scrollen mit Laravel und Inertia.js v2.0 sorgt für eine reibungslose Benutzererfahrung bei gleichzeitiger Beibehaltung guter Leistung und SEO-Praktiken. Die Kombination aus der Composition API von Vue 3 und der WhenVisible-Komponente von Inertia.js erleichtert die Implementierung und Wartung.
Denken Sie daran:
Diese Implementierung kann für verschiedene Anwendungsfälle über Blog-Posts hinaus angepasst werden, z. B. Produktlisten, Bildergalerien oder andere Inhalte, die vom unendlichen Scrollen profitieren.
Das obige ist der detaillierte Inhalt vonImplementierung von Infinite Scrolling mit Laravel, Inertia.js v und Vue 3. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!