Rumah > hujung hadapan web > View.js > teks badan

Bagaimana untuk melaksanakan pemuatan tatal dan paparan halaman tanpa had dalam komponen Vue

WBOY
Lepaskan: 2023-10-09 16:01:44
asal
1206 orang telah melayarinya

Bagaimana untuk melaksanakan pemuatan tatal dan paparan halaman tanpa had dalam komponen Vue

Cara melaksanakan pemuatan skrol dan paparan halaman tanpa had dalam komponen Vue

Dalam pembangunan bahagian hadapan, kami sering menghadapi situasi di mana sejumlah besar data perlu dipaparkan. Untuk meningkatkan pengalaman pengguna, kami biasanya memaparkan data dalam halaman dan memuatkan halaman seterusnya data secara automatik apabila menatal ke bahagian bawah halaman. Artikel ini akan memperkenalkan cara menggunakan komponen Vue untuk melaksanakan fungsi pemuatan tatal dan paparan halaman tanpa had serta memberikan contoh kod khusus.

Pertama, kita perlu menyediakan antara muka bahagian belakang untuk mendapatkan data paging. Katakan kita mempunyai antara muka /api/data, yang melaluinya kita boleh mendapatkan senarai data nombor halaman (halaman) yang ditentukan. Format data yang dikembalikan oleh antara muka adalah seperti berikut: /api/data,通过该接口可以获取指定页码(page)的数据列表。接口返回的数据格式如下:

{
  "total": 100, // 总数据条数
  "list": [...] // 当前页的数据列表
}
Salin selepas log masuk

接下来,我们可以使用Vue的组件化开发思想,将滚动加载和分页展示的功能封装成一个独立的组件。我们可以称之为InfiniteScroll组件。首先,我们需要在父组件中引入该组件,并传入必要的参数。

<template>
  <div>
    <infinite-scroll
      :api-url="'/api/data'" // 后端接口地址
      :page-size="10" // 每页数据条数
      @load-next-page="loadNextPage"
    >
      <!-- 数据展示的代码 -->
    </infinite-scroll>
  </div>
</template>
Salin selepas log masuk

InfiniteScroll组件中,我们需要监听滚动事件,并在滚动到页面底部时触发加载下一页数据的操作。我们可以使用window对象的scroll事件来监听滚动事件。

export default {
  data() {
    return {
      page: 1, // 当前页码
      total: 0, // 总数据条数
      list: [] // 当前页的数据列表
    };
  },
  mounted() {
    window.addEventListener('scroll', this.handleScroll);
  },
  destroyed() {
    window.removeEventListener('scroll', this.handleScroll);
  },
  methods: {
    handleScroll() {
      const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
      const windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
      const documentHeight = document.documentElement.scrollHeight || document.body.scrollHeight;

      if (scrollTop + windowHeight >= documentHeight) {
        this.loadNextPage();
      }
    },
    async loadNextPage() {
      if (this.page >= Math.ceil(this.total / this.pageSize)) {
        return; // 已加载所有数据
      }

      const response = await fetch(`${this.apiUrl}?page=${this.page + 1}`);
      const result = await response.json();

      this.total = result.total;
      this.list = [...this.list, ...result.list];
      this.page++;
    }
  }
};
Salin selepas log masuk

在上面的代码中,我们使用window.addEventListener方法来添加滚动事件监听,以便在滚动到页面底部时触发加载下一页数据的操作。同时,在组件销毁时需要使用window.removeEventListener方法来移除滚动事件监听。

handleScroll方法中,我们首先获取当前滚动的位置,包括页面滚动的距离(scrollTop)、视窗的高度(windowHeight)和文档的总高度(documentHeight)。然后判断当滚动位置加上视窗高度大于等于文档总高度时,说明已经滚动到页面底部,将触发加载下一页数据的操作。

loadNextPage方法中,我们首先判断是否已经加载所有数据,即当前页码是否大于数据总页数。如果已加载所有数据,则直接返回。否则,通过异步请求获取下一页数据,并将返回的数据合并到原有数据列表中,同时更新当前页码和总数据条数。

最后,在InfiniteScroll组件内部,我们可以根据获取到的数据进行相应的展示。

<template>
  <div>
    <ul>
      <li v-for="item in list" :key="item.id">{{ item.name }}</li>
    </ul>
    <div v-if="page >= Math.ceil(total / pageSize)">已加载所有数据</div>
  </div>
</template>
Salin selepas log masuk

在上面的代码中,我们通过v-for指令遍历数据列表,并根据每个元素的id属性作为key,保证列表元素的唯一性。同时,我们在组件底部添加一个提示,当页码大于等于总数据页数时,显示"已加载所有数据"的提示信息。

综上所述,我们通过引入InfiniteScrollrrreee

Seterusnya, kita boleh menggunakan idea pembangunan komponen Vue untuk merangkum fungsi pemuatan tatal dan paparan halaman ke dalam komponen bebas. Kita boleh memanggilnya komponen InfiniteScroll. Pertama, kita perlu memperkenalkan komponen dalam komponen induk dan lulus dalam parameter yang diperlukan.

rrreee

Dalam komponen InfiniteScroll, kita perlu mendengar acara tatal dan mencetuskan pemuatan halaman seterusnya data apabila menatal ke bahagian bawah halaman. Kita boleh menggunakan acara scroll objek window untuk mendengar acara menatal. 🎜rrreee🎜Dalam kod di atas, kami menggunakan kaedah window.addEventListener untuk menambah pendengar acara tatal untuk mencetuskan pemuatan halaman seterusnya data apabila menatal ke bahagian bawah halaman. Pada masa yang sama, anda perlu menggunakan kaedah window.removeEventListener untuk mengalih keluar pendengar acara tatal apabila komponen dimusnahkan. 🎜🎜Dalam kaedah handleScroll, kita mula-mula mendapat kedudukan skrol semasa, termasuk jarak tatal halaman (scrollTop), ketinggian tetingkap (windowHeight) dan jumlah ketinggian dokumen (documentHeight). Kemudian ditentukan bahawa apabila kedudukan tatal ditambah ketinggian tetingkap lebih besar daripada atau sama dengan jumlah ketinggian dokumen, ini bermakna halaman itu telah ditatal ke bawah, dan operasi memuatkan halaman seterusnya data akan dicetuskan. 🎜🎜Dalam kaedah loadNextPage, kami mula-mula menentukan sama ada semua data telah dimuatkan, iaitu sama ada nombor halaman semasa lebih besar daripada jumlah bilangan halaman data. Jika semua data telah dimuatkan, kembalikan terus. Jika tidak, dapatkan halaman data seterusnya melalui permintaan tak segerak, gabungkan data yang dikembalikan ke dalam senarai data asal dan kemas kini nombor halaman semasa dan jumlah bilangan item data pada masa yang sama. 🎜🎜Akhir sekali, di dalam komponen InfiniteScroll, kami boleh memaparkan data dengan sewajarnya. 🎜rrreee🎜Dalam kod di atas, kami merentasi senarai data melalui arahan v-for dan menggunakan atribut id setiap elemen sebagai key , memastikan keunikan elemen senarai. Pada masa yang sama, kami menambah gesaan di bahagian bawah komponen Apabila nombor halaman lebih besar daripada atau sama dengan jumlah halaman data, mesej gesaan "Semua data telah dimuatkan" dipaparkan. 🎜🎜Ringkasnya, dengan memperkenalkan komponen InfiniteScroll dan memberikan parameter yang sepadan, kita boleh merealisasikan fungsi pemuatan skrol dan paparan halaman tanpa had. Dengan mendengar acara tatal, halaman data seterusnya dimuatkan secara automatik apabila menatal ke bahagian bawah halaman untuk mencapai kesan pemuatan tatal tidak terhingga. Pada masa yang sama, dengan mengemas kini data komponen, paparan halaman dilakukan berdasarkan bilangan item data pada setiap halaman dan jumlah bilangan item data. 🎜🎜Saya harap contoh kod yang disediakan dalam artikel ini akan membantu anda dan membolehkan anda melaksanakan fungsi pemuatan tatal dan paparan halaman tanpa had dalam komponen Vue. Jika anda mempunyai sebarang soalan atau cadangan untuk penambahbaikan, sila tinggalkan mesej untuk perbincangan. 🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemuatan tatal dan paparan halaman tanpa had dalam komponen Vue. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan