Skip to content

Instantly share code, notes, and snippets.

@Timtech4u
Created May 17, 2017 03:38
Show Gist options
  • Save Timtech4u/b5382755bf2eef2f1dbbfb5795130f9d to your computer and use it in GitHub Desktop.
Save Timtech4u/b5382755bf2eef2f1dbbfb5795130f9d to your computer and use it in GitHub Desktop.
Basic Vue Router Example
<div id="app">
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand">Vue Router Example</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a v-link="{ path: '/' }">Dashboard</a></li>
<li><a v-link="{ path: '/about' }">About</a></li>
<li><a v-link="{ path: '/contact' }">Contact</a></li>
<li><a v-link="{ path: '/404' }">404</a></li>
</ul>
</div>
</div>
</nav>
<div class="container">
<router-view></router-view>
</div>
</div>
/**
* Define your components
*/
// For 404 page
var notFound = Vue.extend({
// You can use also use template path (Thanks to @jcerdan)
// path : '/path/to/component.html'
template: '<h1>Not Found</h1>'
})
// For dashboard. This is our root page
var dashboardComponent = Vue.extend({
template:
'<div class="jumbotron">' +
'<h1>Dashboard</h1>' +
'<p>This is dashboard</p>' +
'<p>' +
'<a v-link="{ path: \'/subroute\' }" class="btn btn-lg btn-primary" role="button">View SubRoute</a>' +
'</p>' +
'</div>' +
// To show nested subroute
'<router-view></router-view>'
})
// About page.
var aboutComponent = Vue.extend({
template:
'<div class="jumbotron">' +
'<h1>About</h1>' +
'<p>This is about page</p>' +
'<p>' +
'<a v-link="{ path: \'/about/subroute\' }" class="btn btn-lg btn-primary" role="button">View SubRoute</a>' +
'</p>' +
'</div>' +
'<router-view></router-view>'
})
// Our subroute content.
var subRouteContent = Vue.extend({
template:
'<h1>Navbar example</h1>' +
'<p>This example is a quick exercise to illustrate how the default, static and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p>' +
'<p>To see the difference between static and fixed top navbars, just scroll.</p>'
})
// Contact page content
var contactComponent = Vue.extend({
template:
'<div class="jumbotron">' +
'<h1>Contact</h1>' +
'<p>This is contact page</p>' +
'</div>'
})
// Tell Vue to use view-router
Vue.use(VueRouter)
// Router options
var router = new VueRouter({
history: false,
root: '/'
})
// Router map for defining components
router.map({
// For Not Found template
'*': {
component: notFound
},
'/': {
component: dashboardComponent,
// Defining Subroutes
subRoutes: {
'/subroute': {
component: subRouteContent
}
}
},
'/about': {
component: aboutComponent,
subRoutes: {
'/subroute': {
component: subRouteContent
}
}
},
'/contact': {
component: contactComponent
}
});
var App = Vue.extend()
router.start(App, '#app')
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/0.12.10/vue.min.js"></script>
<script src="https://cdn.rawgit.com/vuejs/vue-router/dev/dist/vue-router.min.js"></script>
a:hover {
cursor: pointer;
}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment