【Vue Router】APIを使用して動的なSPAを作成する
第一回
【Vue Router】Vue Routerを使って2つのコンポーネントを画面遷移なしで切り替えたい - Laravelとねころっけくん5.8
第二回
【Vue Router】URLのパラメーターから個別ページに移動したい - Laravelとねころっけくん5.8
今回はあらかじめ用意しておいた商品データベースAPIを使用して、動的な商品詳細ページ作成を行なっていきます。
src/api/products.jsの作成
srcディレクトリにapiというディレクトリを作成し、その中にさらにproducts.jsというjsファイルを作成します。
products.js
//商品のリスト const database = [ {id:1, name:'商品A', price:345, content:'商品Aの紹介です'}, {id:2, name:'商品B', price:9876, content:'商品Bの紹介です'}, {id:3, name:'商品C', price:123, content:'商品Cの紹介です'}, ] //インポート先で使用できる関数をオブジェクトとしてまとめたもの export default { // databaseを取得 fetch(id) { return database }, // idパラメーターに従ってdatabaseからdataを抽出 find(id) { return database.find(el => el.id === id) }, asyncFind(id, callback) { setTimeout(() => { callback(database.find(el => el.id === id)) }, 1000) } }
ProductList.vueの編集
<template> <div class="product-list"> <h1>商品一覧</h1> <ul> <!--受け取ったdatabaseをv-forでリストレンダリング--> <li v-for="{id,name} in list" :key="id"> <router-link :to="`/product/${ id }`">{{ name }}</router-link> </li> </ul> </div> </template> <script> import products from '@/api/products.js' export default { computed: { // products.jsから引き受けたdatabaseをlistという変数にして受け取る list: () => products.fetch() } } </script>