Vue Routerの使い方 [Rails]
作るもの
 
 
 
今回、作成するサンプルのVue Routerのモードは「history」です。
サーバー側の設定はRuby on Railsのroutes.rbで行います。サーバー設定を行いたくない方はRouterのmodeを「hash」にして下さい。
1. プロジェクトの作成
cd ~/ mkdir myapp cd myapp rails new . --webpack=vue --skip-turbolinks --skip-action-mailer --skip-action-mailbox --skip-active-storage --skip-test -d mysql
2. Vue Routerのインストール
yarn add vue-router
3. コントローラー/ビューの作成
bin/rails g controller pages index
4. Vue.js関連のファイル
ファイル構成
app/javascript/app.vue app/javascript/router.js app/javascript/components/article.vue app/javascript/components/home.vue app/javascript/packs/hello_vue.js
app/javascript/app.vue
<template>
  <div> 
    <div>
      <router-link to="/" tag="button">Home</router-link>
      <router-link to="/article/5">記事 NO.5</router-link>
      <router-link to="/article/33">記事 NO.33</router-link>
    </div>
    <!-- router-viewにコンポーネントが描画される -->
    <router-view/>
  </div>
</template>
<script>
</script>
<style scoped>
a {
  color: blue;
  text-decoration: none;
}
/* リンクがアクティブになっているときに適用 */
a.router-link-exact-active {
  color: black;
  font-weight: bold;
}
</style>
app/javascript/router.js
import Vue from 'vue'
import Router from 'vue-router'
import Home from './components/home.vue'
Vue.use(Router)
export default new Router({
  
  // modeのデフォルトは「hashモード」です。
  mode: 'history',
  // 1. hashモード
  // routes.rbの設定は不要です。
  
  // [URLの例]
  // http://localhost:3000/#/
  // http://localhost:3000/#/article/5
  // http://localhost:3000/#/article/33
  
  // 2. historyモード
  // routes.rbの設定が必要です。
  
  // [URLの例]
  // http://localhost:3000/
  // http://localhost:3000/article/5
  // http://localhost:3000/article/33
  
  // 3. abstractモード
  // 詳細は公式サイトへ https://router.vuejs.org/ja/api/#mode 
  
  // アプリのベースURL 
  base: process.env.BASE_URL,
  
  // ルーターの設定
  routes: [
    {
      path: '/',
      name: 'Home',
      
      // 同期でコンポーネントを呼び出す
      component: Home
    },
    {
      path: '/article/:id',
      name: 'Article',
      
      // 非同期でコンポーネントを呼び出す
      // ※Homeのようにimportしたコンポーネントを設定するのでも可
      component: () => import('./components/article.vue')
    },    
  ]
  
})
app/javascript/components/article.vue
<template>
  <p>記事No:{{ id }}</p>
</template>
<script>
export default {  
  name: 'Article',  
  data () {
    return {
      id: 0
    }
  },
  
  created() {
    this.id = this.$route.params.id
  },
  
  // $routeが変更されたときにidを再設定する
  watch: {
    '$route'(to, from) {
      this.id = to.params.id
    }
  }
}
</script>
<style scoped>
</style>
app/javascript/components/home.vue
<template>
  <p>{{ message }}</p>
</template>
<script>
export default {
  name: 'home',
  data: function () {
    return {
      message: "Hello Vue!"
    }
  }
}
</script>
<style scoped>
p {
  font-size: 2em;
}
</style>
app/javascript/packs/hello_vue.js
import Vue from 'vue'
import App from '../app.vue'
import router from '../router.js'
document.addEventListener('DOMContentLoaded', () => {
  const app = new Vue({
    router: router,
    render: h => h(App)
  }).$mount()
  
  document.getElementById('root').appendChild(app.$el)
})
5. Rails関連のファイル
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title>Myapp</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>
    <%= stylesheet_link_tag 'application', media: 'all' %>
    <%= javascript_pack_tag 'application' %>
    <%= javascript_pack_tag 'hello_vue' %>   
  </head>
 
  <body>
    <%= yield %>
  </body>
</html>
app/views/pages/index.html.erb
<div id="root"></div>
config/database.yml
database、username、passwordを設定する。未設定でログインできない場合は「Access denied for user 'root'@'localhost' (using password: NO)」のエラーとなる。
config/routes.rb
Rails.application.routes.draw do get 'pages/index' root to: 'pages#index' # Routerのmodeがhashの場合は不要です get '/article/:id', to: 'pages#index' end
6. 実行する
参考URL
API リファレンス (Vue Router公式)
スポンサーリンク
      
      
      
      
      
    
関連記事
公開日:2020年06月21日
記事NO:02833 
プチモンテ ※この記事を書いた人
|  | |
|  | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ | 
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |

 
        



 
  
 


