サルでもわかるWEBプログラミング

フリーソフトのみでホームページ作成

ユーザ用ツール

サイト用ツール


18.nuxt.jsとbulmaでハンバーガーメニュー:index.html


差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
18.nuxt.jsとbulmaでハンバーガーメニュー:index.html [2019/02/08] – [インデックスページ以外のページ(about.vueとcontact.vue)を作成] adash33318.nuxt.jsとbulmaでハンバーガーメニュー:index.html [2019/02/09] (現在) – [初めてのVuex目次] adash333
行 15: 行 15:
  
 [[18.nuxt.jsとbulmaでハンバーガーメニュー:index.html|18.Nuxt.jsとBulmaでハンバーガーメニュー]] [[18.nuxt.jsとbulmaでハンバーガーメニュー:index.html|18.Nuxt.jsとBulmaでハンバーガーメニュー]]
 +
 +[[19.nuxt.jsで画像一覧アプリ:index.html|19.Nuxt.jsで画像一覧アプリ]]
 +
 +
  
 ===== すること ===== ===== すること =====
行 22: 行 26:
  
 ソースコード ソースコード
 +https://github.com/adash333/Nuxt-Bulma-Hamburger3
  
- +スクリーンショット 
- +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-195135.png}}
-Demo+
  
 ===== 開発環境 ===== ===== 開発環境 =====
行 83: 行 87:
 </template> </template>
 </code> </code>
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-154546.png}}
  
 pages/contact.vue pages/contact.vue
行 95: 行 100:
 </template> </template>
 </code> </code>
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-154515.png}}
  
  
 +===== ナビゲーションバーのコンポーネントを作成する =====
 +components/Navbar.vue
 +<code>
 +<template>
 +  <nav class="navbar is-white" role="navigation" aria-label="main navigation">
 +    <div class="navbar-brand">
 +      <div class="navbar-item">NBH3</div>
 +      <div class="navbar-burger" data-target="navMenu">
 +        <span></span>
 +        <span></span>
 +        <span></span>
 +      </div>
 +    </div><!-- navbar-brand END -->
 +    <div class="navbar-menu" id="navMenu">
 +      <div class="navbar-end">
 +        <nuxt-link to="/" class="navbar-item">トップ</nuxt-link>
 +        <nuxt-link to="/about" class="navbar-item">NBHとは?</nuxt-link>
 +        <nuxt-link to="/contact" class="navbar-item">お問い合わせ</nuxt-link>
 +      </div>
 +    </div><!-- navbar-menu END -->
 +  </nav>
 +</template>
 +</code>
  
 +このNavbar.vueを、layouts/default.vue内に表示するようにします。
  
 +layouts/default.vue
 +(変更前)
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-182646.png}}
 +(変更後)
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-182944.png}}
  
-==== font awesome 5について ====+{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-183008.png}}
  
-https://www.npmjs.com/package/@fortawesome/fontawesome-free-webfonts +===== ハンバーガーメニューをトグルさせる ===== 
-{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190206-090643.png}} +横幅を狭くする、画面右上にハンバーガーメニューが出きますが、それをクリックしても何も起こりません。 
-→ん?、https://git.io/fNCzJ へ行ってみる +isMenuActiveいうプロパティとtoggleMenuというメソッドを定義して、ハンバーガーメニューをクリックすると縦方向にリンクが表示されるようにします。
-{{:18.nuxt.jsbulmaでハンバーガーメニュー:pasted:20190206-090753.png}} +
-→https://www.npmjs.com/package/@fortawesome/fontawesome-free へ行っみる +
-{{:18.nuxt.jsbulmaでハンバーガーメニュー:pasted:20190206-090843.png}} +
-Weekly Downloadsが23万、、、すごい。。+
  
-  *Add Dependencyから、@fortawesome/fontawesome-free をインストールする(他のはアンインストールする) +<code> 
-{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190206-091117.png}}+<template> 
 +... 
 +<div class="navbar-burger" data-target="navMenu" @click="toggleMenu" :class="{'is-active'isMenuActive}"> 
 +..
 +<div class="navbar-menu" id="navMenu" :class="{'is-active': isMenuActive}"> 
 +... 
 +</template>
  
 +<script>
 +export default {
 +  data: () => {
 +    return {isMenuActive: false}
 +  },
 +  methods: {
 +    toggleMenu () {
 +      this.isMenuActive = !this.isMenuActive
 +    }
 +  }
 +}
 +</script>
 +</code>
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-190151.png}}
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-190240.png}}
 +  *これで、トグルするようにはなったのですが、リンク先の飛んでも、メニューが開いたままになってしまっています。
 +  *そこで、『ページ遷移』(=リンクがクリックされる)したときに、メニューが閉じる(isMenuActiveプロパティがfalseになる)ようなプログラムを実装します。
 +  *このときに、Vuexを用いると、コンポーネント間の"isMenuActive"の『バケツリレー』を回避することができます。
  
 +詳細はhttps://qiita.com/isamusuzuki/items/5ec800e423a3a56ef03d#nuxtjs%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E5%8B%95%E4%BD%9C%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8Bを読んだのですが、なかなか難しく、結論からいうと、今回と関係があるのは、以下の2つのようでした。
 +  *isMenuActiveの状態管理に、Vuexを使った方がよい
 +  *Nuxt.jsアプリでは、<nuxt-link>経由で特定のページに移動したとき、fetch()メソッドが呼び出される
  
-参考 +===== Vuexストアを設定する ===== 
-https://qiita.com/riversun/items/4faa56ac40071f638313 +isMenuActiveプロパティの状態(trueかfalseか)を、Vuexストアで管理します(状態管理)。 
-@riversun +Nuxt.jsは、デォルトの状態でVuexがっており、store/ディレクトリに、index.jsや、xxxx.jsを記載したりすることにより、Vuexのコードを記載します。 
-2019年01月18日更新 +『クラシックモード』と、『モジュールモード』があるらしいです。
-1年後に差がつくFont Awesome5 ~ロンエンド開発(ES6,Webpack4,Babel7)へ+
  
 +参考:https://ja.nuxtjs.org/guide/vuex-store/
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-191155.png}}
  
 +store/index.js (新規作成)
 +<code>
 +import Vuex from 'vuex'
  
-https://qiita.com/OvThAlmin/items/154e53952bc46d91d44c +const store = () => new Vuex.Store({ 
-@OvThAlmin +  state
-2018年10月28日に更新 +    isMenuActive: false 
-nuxt-fontawesomeを使って Nuxt.jsへFont Awesome 5を導入する +  }, 
-→これがよさそうです。やってみます。+  mutations: { 
 +    toggleMenu (state) { 
 +      state.isMenuActive = !state.isMenuActive 
 +    }, 
 +    resetMenu (state) { 
 +      state.isMenuActive = false 
 +    } 
 +  } 
 +})
  
-  -Add Dependencyから、nuxt-fontawesome, @fortawesome/fontawesome-svg-core, @fortawesome/vue-fontawesome, @fortawesome/free-solid-svg-icons ストル +export default store 
-  -nuxt.config.jsに以下追記+</code> 
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-191513.png}} 
 +  *layouts/Navbar.vueを編集して、ハガーメニューをクリックすると$storeのtoggleMenu関数を実行し、また、navbar-burgerとnavbar-menuの開閉状態isMenuActiveプロパティで制御しておくようにします。
 <code> <code>
-module.exports = { +... 
- modules[ +<div class="navbar-burger" data-target="navMenu" @click="$store.commit('toggleMenu')" :class="{'is-active'$store.state.isMenuActive}"> 
-    'nuxt-fontawesome' //ここに追記 +... 
-  ],+<div class="navbar-menu" id="navMenu" :class="{'is-active': $store.state.isMenuActive}"> 
 +... 
 +</code> 
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-192256.png}} 
 +  *VisualStudioCodeのターミナル画面で、一度、Ctrl+C => Y => Enterで、サーバを停止したのち、再度、<wrap hi>yarn run dev</wrap>を入力し、Nuxtサーバを再起動します。の時点では、まだ、ページ遷移してもトグルは閉じません。 
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-192825.png}}
  
 +===== ページ遷移したときにトグルが閉じるようにする =====
  
-//こ部分を追 +ページ遷移したとき、すなわち、新しいページが描画されてfetch()メソッドを呼び出されたときにトグルが閉じるように(isMenuActiveがfalseになるように)します。 
- fontawesome: { +具体的には、各pages/index.vue, about.vue, contact.vue<script>内に、以下のコードを追加します。 
-    imports: [ +<code> 
-      +<script> 
-        set: '@fortawesome/free-solid-svg-icons', +export default 
-        icons: ['fas'+  fetch({ store }) { 
-      +    store.commit("resetMenu");
-    ]+
   }   }
-}+}
 +</script>
 </code> </code>
 +pages/index.vue
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-193344.png}}
 +pages/about.vue
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-193413.png}}
 +pages/contact.vue
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-193438.png}}
 +
 +今回は以上となります。
 +
 +===== ソースコード =====
 +ソースコード
 +https://github.com/adash333/Nuxt-Bulma-Hamburger3
 +
 +スクリーンショット
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-195135.png}}
 +
 +===== 今回写経させていただいたサイト =====
 +https://qiita.com/isamusuzuki/items/5ec800e423a3a56ef03d
 +{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190208-195326.png}}
 +
 +
 +
  
-{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190206-133640.png}} 
-{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190206-133718.png}} 
-{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190206-133808.png}} 
  
-{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190206-134027.png}} 
-{{:18.nuxt.jsとbulmaでハンバーガーメニュー:pasted:20190206-134129.png}} 
  
  
  
  
-https://codesandbox.io/s/1xv4vwlj4 
  
  
行 169: 行 263:
 目次: 目次:
  
-前:+前:[[17.nuxt.jsのvuexでパスワード制限:index.html|17.Nuxt.jsのvuexでパスワード制限]]
  
-次:+次:[[19.nuxt.jsで画像一覧アプリ:index.html|19.Nuxt.jsで画像一覧アプリ]]
  
  


18.nuxt.jsとbulmaでハンバーガーメニュー/index.html.1549640672.txt.gz · 最終更新: 2019/02/08 by adash333

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki