برنامه نویسی

چگونه یک صفحه بندی پویا ساده از ابتدا در Vue ایجاد کنیم

در برخی مواقع ممکن است یک آرایه طولانی بخواهید محتوا را به صفحات مختلف جدا کنید تا کاربران بتوانند به راحتی در محتوا حرکت کنند، بنابراین شما مجبور خواهید بود صفحه بندی کنید، در حالی که ممکن است از یک بسته npm برای صفحه بندی استفاده کنید، همچنین ممکن است بخواهید از ابتدا یکی را ایجاد کنید. مثل من برای کارایی، کارایی و برای اینکه اندازه بسته‌تان را زیاد نکنید، زیرا همانطور که همه ما می‌دانیم برنامه‌ای که سبک است سریع‌تر اجرا می‌شود و در طول توسعه و تولید کارآمدتر عمل می‌کند.
ما تابع خود را در یک کد Vue3 موجود می‌نویسیم.
اولین قدم ایجاد یک آرایه است.

import {ref} from "vue";
const questions = [
  {
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 1,
    bg: "#FFFFFF",
  },
  {
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 2,
    bg: "#F9F2EE",
  },
  {
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 3,
    bg: "#FFFFFF",
  },
  {
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 4,
    bg: "#F9F2EE",
  },
  {
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 5,
    bg: "#FFFFFF",
  },
  {
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 6,
    bg: "#F9F2EE",
  },
  {
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 7,
    bg: "#FFFFFF",
  },
  {
    img: require("@/assets/contact/alao.png"),
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 8,
    bg: "#FFFFFF",
  },
  {
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 9,
    bg: "#F9F2EE",
  },
  {
    desc: "Jessica Gabriel recently posted interview questions for UI/UX Designer",
    date: "Friday 5th, 2022 6:45pm",
    field: "UI/UX Designers",
    id: 10,
    bg: "#FFFFFF",
  },
];
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از ایجاد آرایه خود، می توانید پیش بروید و آن را در تگ قالب خود ترسیم کنید.

<template>
<div v-for="item in questions" :key="item.id">
{{ item.field }}
</div>
</template>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آرایه نگاشت شده هر آیتم را در سرور توسعه شما نشان می دهد، مرحله بعدی ایجاد عملکرد صفحه بندی است. ابتدا حالت های خود را ایجاد کرده و مقادیری را به آنها اختصاص می دهید.

تصویری از آنچه پس از نگاشت از طریق آرایه خواهیم داشت

// stores the total number of items in array 
const totalPosts = questions.length;
// stores the total numbers of page the array creates depending of the number of posts per page
const pageNumbers = ref([]);
// total of items to be displayed on one page
const postPerPage = ref(5);
the number of the current page displayed
const currentPage = ref(1);
// setting starting point amd ending point. there is a differnce of 10 if start is 13 end woukd be 23. so in an current post it will be totalArray.value.slice(13,23)
const indexOfLastPost = ref();
const indexOfFirstPost = ref();
//shows the current array displayed
const currentPosts = ref()


indexOfLastPost.value = currentPage.value * postPerPage.value;
indexOfFirstPost.value = indexOfLastPost.value - postPerPage.value;
currentPosts.value = questions.slice(indexOfFirstPost.value, indexOfLastPost.value);
// total number of pages available
const paginateNumber = Math.ceil(totalPosts / postPerPage.value);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون می توانید آرایه ما در قالب را به آرایه اصلاح شده currentPosts تغییر دهید.

<template>
<div v-for="item in currentPosts" :key="item.id">
{{ item.field }}
</div>
</template>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون می توانید تنها پنج مورد را در سرور توسعه ببینید، اکنون می توانید ناوبری صفحه بندی ما را ایجاد کنید.

تصویری از آنچه پس از نگاشت از طریق آرایه تقسیم شده خواهیم داشت

<script>
for (let i = 1; i <= Math.ceil(totalPosts / postPerPage.value); i++) {
  pageNumbers.value.push(i);
}
</script>
<template>
 <div class="interview__pagination">
      <h6 @click="previous">Previous</h6>
      <div class="numbers">
        <p v-for="item in pageNumbers" :key="item" @click="currentPage = item">
          {{ item }}
        </p>
      </div>
      <h6 @click="next">Next</h6>
    </div>
</template>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس می توانید ادامه دهید و عملکردهای ناوبری خود را ایجاد کنید.

تصویری از آنچه پس از ایجاد ناوبری خواهیم داشت

const previous = () => {
  if (currentPage.value > 1) {
    currentPage.value = currentPage.value - 1;
  }
};
const next = () => {
  if (currentPage.value >= 1 && currentPage.value < paginateNumber) {
    currentPage.value = currentPage.value + 1;
  }
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا اگر روی دکمه‌های ناوبری کلیک کنید، هیچ اتفاقی نمی‌افتد، باید مقادیر تغییر یافته را تماشا کنید و عملکرد را با تغییر به‌روزرسانی کنید. ما vue watcher را به کد خود معرفی خواهیم کرد.

import { watch } from "vue";
 watch(currentPage, (currentValue, oldValue) => {
      indexOfLastPost.value = currentValue * postPerPage.value;
      indexOfFirstPost.value = indexOfLastPost.value - postPerPage.value;
      console.log(indexOfLastPost.value)
      currentPosts.value = questions.slice(indexOfFirstPost.value, indexOfLastPost.value);
    });
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون، وقتی روی ناوبری خود کلیک می کنید، همه چیز به درستی کار می کند.

تصویری از همه چیز درست کار می کند

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا