基礎からメモ: Vue.js CH2-p83 外部データ(Json)の取得
外部のJSONファイルに書かれたデータを、Vue.jsのデータとして取り込む。Ajaxライブラリの「axios」を使う。
[list.json]
[ { "id": 1, "name": "スライム", "hp": 100 }, { "id": 2, "name": "ゴブリン", "hp": 200 }, { "id": 3, "name": "ドラゴン", "hp": 500 } ]
[index14.html]
<div id="app"> <!-- 外部から取り込んだJSONデータを表示 --> <ul> <li v-for="(item, index) in list" v-bind:key="item.id"> ID: {{ item.id }} {{ item.name }} HP: {{ item.hp }} </li> </ul> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script> <script src="main14.js"></script>
[main14.js]
/* 外部JSONデータの取得 */ var app = new Vue({ el: '#app', data: { list: [] }, created: function() { axios.get("list.json").then(function(response) { this.list = response.data; }.bind(this)).catch(function(e) { console.error(e) }) } })
インスタンスが作成されリアクティブの初期化後にすぐJSONデータを取得 表示したいので、ライフサイクルフックのcreated
を使っている。
結果表示
- ID: 1 スライム HP: 100
- ID: 2 ゴブリン HP: 200
- ID: 3 ドラゴン HP: 500
ここまではindex.htmlが置かれたWebサーバのルートにあるJSONファイルだったが、JSONデータを取得するAPIとして公開されたURLからデータを得てみる。例としてQiitaの最新記事を取得してみる。
[index15.html]
<div id="app"> <!-- 外部から取り込んだJSONデータを表示 (Qiita記事取得) --> <button v-on:click="doRequest">Qiita記事取得</button> <ul> <li v-for="(item, index) in items" v-bind:key="item.id"> [{{ index }}]: <a :href="item.url" target="_blank" rel="nofollow noopener noreferrer"> {{ item.title }}</a> <span>(更新日: {{ item.updated_at }})</span> </li> </ul> </div>
[main15.js]
/* 外部JSONデータの取得 (Qiita記事取得) */ var app = new Vue({ el: '#app', data: { items: [] }, methods: { doRequest: function(e) { axios.get('https://qiita.com/api/v2/items?page=1&per_page=20') .then(function(res) { app.items = res.data; }).catch(function(err) { console.log(err); }); } } });
「Qiita記事取得」と書かれたボタンを押すと、最新記事のリストが表示される。