Vue.jsで簡単ページング実装
2015 年 7 月 21 日 by unodSPA(=Single Page Application)の構築などに必要不可欠なJavaScriptのフレームワークですが、
今回は、その中でも後発でシンプルな作りの「Vue.js」を触ってみたので、ご紹介します。
■Vue.jsでできること
Vue.jsはHTML表示要素とJavaScriptのデータを紐付ける、双方向バインディングを行うライブラリです。
以下はVue.js公式サイトトップ(http://jp.vuejs.org/)に掲載されている「10秒でわかる例」です。
【HTML】
<div id="demo"> <p>{{message}}</p> <input v-model="message"> </div>
【JavaScript】
var demo = new Vue({ el: '#demo', data: { message: 'Hello Vue.js!' } })
表示(HTML入力フォーム値)が変更されたら自動的にJavaScriptのデータに反映されます。
そして、データが変更されたら自動的に表示が変わります。
まずはVue.jsがどういったものか、お分かり頂けたでしょうか。
■ページングを実装してみる
Vue.jsの「データが変更されたら自動的に表示が変わる」機能を利用して、ページングの実装をしてみます。
Ajaxでデータを取得して記事一覧に反映させる場合のソースは以下になります。
【HTML】
<div id="target"> <h1>記事一覧</h1> <dl v-repeat="article : articles"> <dt v-text="article.title"></dt> <dd v-text="article.body"></dd> </dl> </div>
【JavaScript】
var is_init=false; function updateList(_limit, _offset){ $.ajax({ type: "GET", url: "/api/getlist", dataType: "json", data:{ 'limit':_limit, 'offset':_offset, }, success: function(_data){ if(!is_init){ //ViewModelの初期化(HTMLとデータの紐付けを定義) vm = new Vue({ el: '#target', data :{ 'articles':_data } }); is_init = true; }else{ //2回目以降は、ViewModelのデータを差し替える→HTMLに反映されます。 vm.$set('articles',_data); } } }); }
関数updateListを任意の引数で呼び出すことで、ページングが可能となります。
ViewModelに対して、データの更新を行うと、HTML表示も自動的に切り替わります。
Vue.jsを使わずjQueryのみで実装する場合と比べ、HTML要素へのid設定が不要になります。
また、DOM操作のためのJavaScriptコードが不要になっていることがわかります。
■ まとめ
・メリット
Vue.jsの機能がシンプルであるため学習コストが低く、データバインディングの恩恵をすぐに実感できます。
その他のフレームワークと比べて軽量なので、既存システムにも、リッチなUIが必要なページのみ対象に部分的に導入できそうです。
・デメリット
対応ブラウザがIE9以上なので、レガシーブラウザに対応する必要があるシステムでは採用できません。
タグ: JavaScript