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

