19.nuxt.jsで画像一覧アプリ:index.html
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| 19.nuxt.jsで画像一覧アプリ:index.html [2019/02/08] – [0.用意するもの(開発環境)] adash333 | 19.nuxt.jsで画像一覧アプリ:index.html [2019/02/09] (現在) – [犬種リストを保存するストアを作成] adash333 | ||
|---|---|---|---|
| 行 10: | 行 10: | ||
| {{: | {{: | ||
| + | なお、今回も、CodeSandbox上で試みましたが、うまくいかなかったため、ローカルパソコン上で開発を行っています。 | ||
| + | ===== 初めてのVuex目次 ===== | ||
| + | [[14.vue.jsのvuexで入力フォーム: | ||
| + | |||
| + | [[15.vue.jsのvuexでカウンター: | ||
| + | |||
| + | [[16.vue.jsのvuexでパスワード制限: | ||
| + | |||
| + | [[17.nuxt.jsのvuexでパスワード制限: | ||
| + | |||
| + | [[18.nuxt.jsとbulmaでハンバーガーメニュー: | ||
| + | |||
| + | [[19.nuxt.jsで画像一覧アプリ: | ||
| ===== 方針をたてる ===== | ===== 方針をたてる ===== | ||
| -サーバーサイドは、https:// | -サーバーサイドは、https:// | ||
| 行 53: | 行 66: | ||
| </ | </ | ||
| - | ===== Codesandboxで新規Nuxt.jsアプリの作成 ===== | + | ===== 新規Nuxt.jsアプリの作成 ===== |
| + | *VisualStudioCodeのターミナル画面で、以下を入力 | ||
| + | < | ||
| + | yarn create nuxt-app Nuxt-axios-DogPhotos | ||
| + | </ | ||
| + | いろいろ聞かれるので、以下のように設定します。 | ||
| + | -プロジェクト名は? => (Enter) | ||
| + | -プロジェクトの一言説明は? => (Enter) | ||
| + | -サーバーフレームワークは? => 使わない | ||
| + | -eslintは使う? => PWA supportとAxiosを入れる(Linterは使わない、PrettierはVisualStudioCodeの拡張プラグインPrettier - Code formatterを用いています) | ||
| + | -axiosモジュールは使う? => 使います!(大事なことなので、、、) | ||
| + | -UIフレームワークは? => vuetify | ||
| + | -testフレームワークは? => 使わない | ||
| + | -レンダリングモードは? => ユニバーサルじゃなくてシングルページアプリケーション | ||
| + | -作者名は? => (Enter) | ||
| + | -パッケージマネージャは? => npmじゃなくてyarn | ||
| + | {{: | ||
| + | < | ||
| + | cd Nuxt-axios-DogPhotos | ||
| + | yarn run dev | ||
| + | </ | ||
| + | {{: | ||
| + | *アドレスをCtrlを押しながらクリックすると、以下のページが開きます。 | ||
| + | {{: | ||
| - | *[[https:// | + | これで、Nuxt.jsでvuetifyを使用する準備が出来ました。 |
| - | {{: | + | layouts/default.vueのdarkを消したり、以下のように少し変更します。 |
| - | {{: | + | |
| - | *Nuxt.jsも2クリックで開発環境が整いました。 | + | |
| - | {{: | + | |
| - | + | ||
| - | ===== CodesandboxのNuxt.jsアプリに@nuxtjs/ | + | |
| - | Vue.jsでvuetifyを利用するためには、vuetifyをインストールしましたが、Nuxt.jsでvuetifyを利用するためには、@nuxtjs/vuetifyをインストールし、さらに、nuxt.config.jsファイルのmodulesに、@nuxtjs/ | + | |
| - | + | ||
| - | *画面左側を、下方向へ行きます | + | |
| - | {{: | + | |
| - | *Add Dependency をクリック | + | |
| - | {{: | + | |
| - | *nuxtjs/ | + | |
| - | {{: | + | |
| - | *だいぶ時間がかかります。(ときどき、Bad Gatewayと表示されて、先に進めなくなることもあります。そんなときは、Create Sandboxからやり直したりしますが、どのような条件でBad Gatewayになるのか私にはわかりません。。。) | + | |
| - | {{: | + | |
| - | *nuxt.config.jsファイルのmodulesに、@nuxtjs/ | + | |
| - | (変更前) | + | |
| - | {{: | + | |
| - | (変更後) | + | |
| - | {{: | + | |
| - | *layouts/ | + | |
| < | < | ||
| - | <script src=" | + | <script src=" |
| </ | </ | ||
| - | (変更前) | + | {{:19.nuxt.jsで画像一覧アプリ: |
| - | {{:14.nuxt.jsで画像一覧アプリ: | + | |
| - | (変更後) | + | |
| - | {{: | + | |
| - | + | ||
| - | 参考:https:// | + | |
| - | @munieru_jp | + | |
| - | 2018年12月01日に更新 | + | |
| - | Nuxt.jsのプロジェクトにVuetify.jsを導入する方法 | + | |
| - | ===== pages/ | ||
| - | layouts/ | ||
| - | |||
| - | pages/ | ||
| - | (変更後) | ||
| - | {{: | ||
| - | |||
| - | layouts/ | ||
| - | (変更後) | ||
| - | {{: | ||
| ===== 犬種リストをDog APIで取得する ===== | ===== 犬種リストをDog APIで取得する ===== | ||
| 行 110: | 行 107: | ||
| ==== Dog API用のクラスを作成 ==== | ==== Dog API用のクラスを作成 ==== | ||
| - | *apiフォルダを作成 | + | api ディレクトリを新規作成してDog API用のクラスを作成します。 |
| - | {{: | + | |
| - | *api/ | + | api/ |
| - | {{:14.nuxt.jsで画像一覧アプリ:pasted: | + | < |
| - | | + | import axios from ' |
| - | {{:14.nuxt.jsで画像一覧アプリ: | + | |
| + | class DogApi | ||
| + | constructor() | ||
| + | this.apiBase = 'https://dog.ceo/ | ||
| + | | ||
| + | |||
| + | | ||
| + | return axios.get(`${this.apiBase}/breeds/list/all`) | ||
| + | | ||
| + | return json.data.message; | ||
| + | }) | ||
| + | .catch(e => ({ error: e })); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | const dogApi = new DogApi(); | ||
| + | |||
| + | export default dogApi; | ||
| + | </ | ||
| + | {{:19.nuxt.jsで画像一覧アプリ: | ||
| ==== 犬種リストを保存するストアを作成 ==== | ==== 犬種リストを保存するストアを作成 ==== | ||
| - | *store/ フォルダ内にindex.js | + | Vuexを利用します。 |
| - | {{: | + | |
| - | *ページ側で | + | store/ |
| - | {{:14.nuxt.jsで画像一覧アプリ: | + | < |
| + | import Vuex from ' | ||
| + | |||
| + | const appStore = () => { | ||
| + | return new Vuex.Store({ | ||
| + | state: { | ||
| + | breed_list: {}, | ||
| + | }, | ||
| + | mutations: { | ||
| + | breed_list_update(state, | ||
| + | state.breed_list = {...payload} | ||
| + | }, | ||
| + | } | ||
| + | }) | ||
| + | }; | ||
| + | |||
| + | export default appStore; | ||
| + | </ | ||
| + | {{:19.nuxt.jsで画像一覧アプリ: | ||
| ==== 画面上に犬種リストを表示する ==== | ==== 画面上に犬種リストを表示する ==== | ||
| - | 「Vuexの | + | 「Vuexの |
| pages/ | pages/ | ||
| + | < | ||
| + | < | ||
| + | import dogApi from ' | ||
| + | |||
| + | export default { | ||
| + | async fetch({store}) { | ||
| + | let json = await dogApi.breeds(); | ||
| + | store.commit(' | ||
| + | }, | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | {{: | ||
| + | |||
| + | Chrome拡張の[[https:// | ||
| + | -Chromeで、Ctrl+Shift+Iでコンソール画面を開く | ||
| + | -一番右の Vue をクリック | ||
| + | -右側の方のVuex をクリック(かなり横長にしないと、Vueや、Vuexのボタンは見つけることが困難、、、) | ||
| + | {{: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ==== 画面上に犬種リストを表示する ==== | ||
| + | Vuexの | ||
| + | |||
| + | pages/ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <v-card class=" | ||
| + | < | ||
| + | <v-flex xs4 v-for=" | ||
| + | <v-card class=" | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | import dogApi from ' | ||
| + | import {mapState} from ' | ||
| + | |||
| + | export default { | ||
| + | async fetch({store}) { | ||
| + | let json = await dogApi.breeds(); | ||
| + | store.commit(' | ||
| + | }, | ||
| + | // mapState ヘルパー | ||
| + | computed: mapState([' | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | (変更前) | ||
| + | {{: | ||
| + | (変更後) | ||
| + | {{: | ||
| - | {{: | ||
| - | TypeError | ||
| - | Cannot read property ' | ||
| - | 途中 | ||
| + | ===== 犬種リストと、それぞれの犬種の画像リストのページの構成について ===== | ||
| + | 引き続き、https:// | ||
| + | 特定の犬種をクリックすると、画像が一覧表示されるようにします。 | ||
19.nuxt.jsで画像一覧アプリ/index.html.1549663809.txt.gz · 最終更新: 2019/02/08 by adash333
