forget for get

覚えるために忘れる

VueRouterチュートリアル

https://router.vuejs.org/ja/guide/

 

VueRouterの「基本的な使い方」を見ながらサンプルをつくってみた。

 

<html>
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<style>
#title {
  background-color:#1ce;
}
</style>
</head>
<body>
<div id="app">
  <div id="title"><a href="/vrouter.html">GAME</a></div>
  <p>
    <router-link to="/gacha" class="btn btn-primary">gacha</router-link>
    <router-link to="/chara" class="btn btn-primary">chara</router-link>
    <button class="btn btn-primary" v-on:click="viewItem">item</button>
    <router-link to="/goods" class="btn btn-primary">goods</router-link>
    <router-link to="/tool" class="btn btn-primary">tool</router-link>
    <router-link to="/xxx" class="btn btn-primary">xxx</router-link>
  </p>
  <router-view></router-view>
</div>
<script>
const Gacha = { template: '<div>ガチャ</div>' }
const Chara = {
  props: ['charas'],
  template: `
    <div>
      <p>キャラ</p>
      <div v-for="chara in charas">
        {{chara.name}} Lv.{{chara.level}}
        <router-link :to="{name: 'chara-detail', params: {name: chara.name}}" class="btn btn-primary">detail</router-link>
      </div>
    </div>
  `
}
const CharaDetail = {
  props: ['name'],
  template: `
    <div>
      <p>キャラ詳細:{{name}}</p>
      <router-link :to="{name: 'chara-profile', params: {name: name}}" class="btn btn-primary">profile</router-link>
      <router-link :to="{name: 'chara-status', params: {name: name}}" class="btn btn-primary">status</router-link>
      <router-view></router-view>
    </div>
  `
}
const CharaProfile = {template: '<p>Profile</p>'};
const CharaStatus = {template: '<p>Status</p>'};
const Item = { template: '<div>アイテム</div>' }
const NotFound = { template: '<div>404</div>' }

const router = new VueRouter({
  routes: [
    { path: '/gacha', component: Gacha },
    { path: '/chara',
      component: Chara,
      props: {
        charas: [
          {name: 'ドッグ', level: 3},
          {name: 'モンキー', level: 5},
          {name: 'バード', level: 4}
        ]
      }
    },
    { path: '/chara/:name',
      name: 'chara-detail',
      component: CharaDetail,
      props: true,
      children: [
        {
          path: 'profile',
          name: 'chara-profile',
          component: CharaProfile
        },
        {
          path: 'status',
          name: 'chara-status',
          component: CharaStatus
        },
      ]
    },
    { path: '/item', component: Item, alias: '/goods' },
    { path: '/tool', redirect: '/item' },
    { path: '/*', component: NotFound }
  ]
})
const app = new Vue({
  router,
  methods: {
    viewItem: function() {
      router.push('/item')
    }
  }
}).$mount('#app')
</script>
</body>
</html>