jsonを使ったVue.jsでの配列表示
Vueの単純な配列表示は簡単にできたので、jsonファイルからデータを抽出して配列表示させる勉強をしました。
axiosを使う
Vueでjsonファイルからデータを取得するときはaxiosを使うといいらしい
【参考】
axios を利用した API の使用 — Vue.js
*js
import Vue from 'vue'; import axios from 'axios'; require('es6-promise').polyfill(); var news = new Vue({ el: '#test', data: { datalists:[], }, created() { axios.get('/assets/json/test.json') .then(response => { this.datalists = response.data; }) .catch(error => { console.log(error); }); }, });
*html
<div id="test"> <ul> <li v-for="data in datalists"> 名前:{{data.name}} 年齢:{{data.age}}</p> </li> </ul> </div>
*ブラウザ
名前:たなか 年齢:22 名前:すずき 年齢:40 名前:いとう 年齢:10
公式ではmounted
を使っているが、データを設定するだけなので、created
を使用した。
【参考】
Vuejs APIアクセスはcreatedとmountedのどちらで行う?
jsonのデータはresponse
というオブジェクトの中のdata
プロパティにある。
→オブジェクト・プロパティについて【参考】
JSのオブジェクト、プロパティ、メソッドとか言葉のことなど勉強その①
jsonのデータをVueのdata
プロパティで定義したdatalists
にデータを格納。
データの取得に成功した場合の処理は、then
でつなげる。
取得に失敗したときは、catch
を使用して呼び出す。
then
やcatch
はpromise
オブジェクトに用意されてるメソッド。
axiosは非同期処理でpromise
を返すらしい。
【参照】
JavaScript Promiseの本
Proimise の活用 – chatbox blog
IEはprimise
に対応してない
IEではこのprimise
は対応してなくエラーが出たので、「es6-promise」をnpmで読み込んで解決しました。
require('es6-promise').polyfill();
表示数の制限
表示する数を制限するときは算出プロパティのcomputed
等を使えばできるみたい。
今回はデータの最新2つを表示する設定にした。
*js
computed: { filterlist: function() { return this.datalists.slice(0, 2); } }
*html
<div id="test"> <ul> <li v-for="data in filterlist"> 名前:{{data.name}} 年齢:{{data.age}}</p> </li> </ul> </div>
*ブラウザ
名前:たなか 年齢:22 名前:すずき 年齢:40
以上、普段使える知識が身についたと思いました。