Vue – Router

Set up

To use vue-router, previous easy html does not work properly.
I set up simple environment using npm. Please follow

Install vue and vue-router

npm init 
npm install vue vue-router
npm install http-server -D

http-server is to run server locally. (It’s easy to try route)
To run http-server easily, I changed a bit of npm command.

{
  "name": "sample6",
  "version": "1.0.0",
  "description": "Vue Router Sample",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "http-server -o"
  },
  "keywords": [
    "Vue",
    "Router"
  ],
  "author": "DJ110",
  "license": "MIT",
  "dependencies": {
    "vue": "^2.5.13",
    "vue-router": "^3.0.1"
  },
  "devDependencies": {
    "http-server": "^0.10.0"
  }
}

Hash mode and HTML5 mode

This is same as Angular.
By default, vue router is hash mode.

Mode Description
Hash mode Add # tag under root URL
HTML5 No hash tag, normal type

In this sample, I use HTML5 mode (not hash mode) to make URL simple.
We can set by code.

Sample Code

<html>
  <head>
    <script src="node_modules/vue/dist/vue.min.js"></script>
    <script src="node_modules/vue-router/dist/vue-router.min.js"></script>
  </head>
  <body>
    <div id="app">
      <router-link to="/top">TopPage</router-link>
      <router-link to="/users">User List</router-link>
      <router-link :to="{ name: 'user', params: { userId: 123}}">User Details</router-link>
      <router-view></router-view>
    </div>
    <script>
    var router = new VueRouter({
      mode: 'history',  <!-- If delete, this is hash mode -->
      routes: [
        {
          path: '/top',
          component: {
            template: '<div>Top page</div>'
          }
        },
        {
          path: '/users',
          component: {
            template: '<div>User List</div>'
          }
        },
        {
          path: '/user/:userId',
          name: 'user',
          component: {
            template: '<div>User Id: {{ $route.params.userId}}</div>'
          }
        }
      ]
    })

    var app = new Vue({
      router: router
    }).$mount('#app')

    </script>
  </body>
</html>

router-view is changeable layout part.