LoginSignup
18
15

More than 3 years have passed since last update.

vue-paginateを使ってページネーションを実装する

Last updated at Posted at 2019-05-20

はじめに

Vue.jsを使ってSPAを構築する時に、ページネーションを実装しようとしました。
当初、vuejs-paginateを使い、作ろうと思ったのですが、リストとの関連づけが上手くいかず断念しました。

vuejs-paginateのGitHubはこちら

そんな中、vue-paginateというパッケージを使ってページネーションを実装したので、その方法についてまとめます。名前が紛らわしいですが、上記とは別物です。

vue-paginateのGitHubはこちら

使用するための準備

ターミナルなどでプロジェクトのフォルダに移動し、以下のコマンドを実行。

npm install vue-paginate --save

javascripに以下を記載。

app/javascript/packs/log.js
import VuePaginate from 'vue-paginate';
Vue.use(VuePaginate);

データを設定

ページを切り替えたいdataは配列にします。自分の場合、以下のようになっていました。

<script>
export default {
  data: function () {
    return {
      // logs: [{id: 1, title: 'test'}, {id: 2, title: 'test2'}]のように入る
      logs: []
    }
  }
}
</script>

dataにpaginateという項目を持たせます。paginateは配列にし、要素は任意の文字列にします。

<script>
export default {
  data: function () {
    return {
      logs: [],
      paginate: ['paginate-log']
    }
  }
}
</script>

ページネーションを実装

v-forを使って、表示させている箇所を覆うようにpaginateタグを付与します。

<template>
  <div>
    <ul>
      <paginate name="paginate-log" :list="logs" :per="5">
        <li v-for="log in paginated('paginate-log')">
          {{ log.id }}: {{ log.title }}
        </li>
      </paginate>
    </ul>
  </div>
</template>

nameには先程設定したpaginate: ['paginate-log']の文字を指定します。
:listにはページで切り替えたい、dataの配列を指定します。
:perには1ページあたりの要素数を記載します。
そして、v-forの部分にpaginated()を付けます。

さらに、paginate-linksを記載し、ページの部分を表示させます。

<template>
  <div>
    <ul>
      <paginate name="paginate-log" :list="logs" :per="5">
        <li v-for="log in paginated('paginate-log')">
          {{ log.id }}: {{ log.title }}
        </li>
      </paginate>
    </ul>
    <paginate-links for="paginate-log" class="pagination" :show-step-links="true"></paginate-links>
  </div>
</template>

forの部分はページで切り替えたいdataの配列を指定します。
:show-step-linksは<< 1 2 3 >>の<<や>>の部分を表示させます。

おわりに

vue-paginateを使って簡単にページネーションを実装することができました。

18
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
15