SlideShare a Scribd company logo
Vue
Routing
Tutorial:
Getting
started
with Vue
Router
Please bring clothes, food and
medical supplies, and beddings!
www.bacancytechnology.com
VueJS is a robust and most progressive
Javascript framework used for developing
dynamic and excellent front-end
applications. VueJS is also famous for
building SPAs (Single Page Applications).
Rather than making requests to the back-
end and rendering the respective pages at
the front-end, VueJS provides a Vue
Router library to manage the mechanism
known as ‘routing.’ This provides a better
user experience and improves application
responsiveness.
In this tutorial, we will learn how to
implement Vue Router with our simple
Single Page Application. We will develop a
small demo application that will have a
few pages linked through Vue Router. I’m
assuming that you’re already familiar with
VueJS. So, let’s begin our journey!
CONTENTS
1. Goal of Vue Routing Tutorial
2. Vue Router Example: Steps to implement
Vue Routing
3. Conclusion
Goal of Vue
Routing
Tutorial
https://youtu.be/4xAIuvAkJWY
We will build a demo blog application that
will consist of posts (title/description) and
comments (related to the post). We will
retrieve data using Axios. And for that, we
will use these APIs –
To fetch posts –
To fetch post details of post 1 –
To fetch comments of post 1 –
https://jsonplaceholder.typicode.com/posts
https://jsonplaceholder.typicode.com/posts
/1.
https://jsonplaceholder.typicode.com/com
ments?postId=1.
Each row consists of a blog post. On clicking
the blog, we will be able to view comments
and post details.
Vue Router
Example:
Steps to
implement
Vue Routing
Project Setup
Create components
Linking components using Vue Router
Dynamic Routing
Implementing Page Not Found
We have divided the steps into four
sections-
Follow this step-by-step guide to
implement Vue Routing.
Install vue-cli
1) Project Setup
npm install --global vue-cli
Create a new project
Install dependencies
vue create vue-router-example
When the questions are prompted on your
terminal, ensure your answer is “yes” for
vue-router installation.
cd vue-router-example
npm install axios bootstrap-vue
Run the server
npm run serve
After running the above command, you’ll
see the default screen on
http://localhost:8080/.
2) Create Components
Before moving forward, have a look at the
folder structure of vue-router-example
(Folder structure can vary from person to
person)
Note down the file names and copy-paste
the code, respectively.
main.js
Import IconsPlugin,BCard,BContainer,BCol,
and BRow from ‘bootstrap-vue’
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import {
IconsPlugin,
BCard,
BContainer,
BCol,
BRow,
} from "bootstrap-vue";
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-
vue.css'
Vue.use(IconsPlugin)
Vue.component("b-card", BCard);
Vue.component("b-container",
BContainer);
Vue.component("b-col", BCol);
Vue.component("b-row", BRow);
Vue.config.productionTip = false
new Vue({
router,
render: h => h(App)
}).$mount('#app')
App.vue
The default UI will consist of Home Link
and the view based on the routes hit.
On clicking Home the UI will be redirected
to ‘/’ and display the respective component
from file router/index.js.
< router-view /> will let us know which
route will display which component.
<template>
<div id="app">
<div id="nav">
<router-link to="/">Home</router-link>
</div>
<router-view/>
</div>
</template>
router/index.js
Import vue-router package to set the
navigating to the components. There are in-
total five routes, but primarily we will cover
the first two routes for setting up the basic
routing.
import Vue from 'vue'
import VueRouter from 'vue-router'
import Posts from
"../components/pages/Posts.vue";
Vue.use(VueRouter)
const routes = [
{
path: '/', redirect: '/posts'
},
{
path: '/posts',
component: Posts,
},
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router
/’ defines the default view, here Home page.
We will redirect ‘/’ to ‘/posts’ which will
display component Posts.
Now, let’s see what the Posts component
has?
pages/Posts.vue
<template>
<div>
<base-post :posts="allPosts"></base-post>
</div>
</template>
<script>
import { Service } from "../../service.js";
import BasePost from '../ui/BasePost.vue';
export default {
components: { BasePost },
name: 'Posts',
created() {
this.getAllPosts();
},
data() {
return {
allPosts: [],
}
},
methods: {
getAllPosts() {
Service.get(`posts`)
.then(res => {
this.allPosts = res.data;
})
.catch(error => console.log(error));
},
}
}
</script>
We have imported
BasePost from ui/BasePost for
displaying the user interface of all the
posts
Service from service.js to access the
remote data using Service.get(‘posts’).
On resolving the promise, we will store
the response in the array named
allPosts, and if the promise is rejected,
we will simply console the error.
Now let’s see what BasePost.vue component
and service.js has?
ui/BasePost.vue
<template>
<div>
<b-card
v-for="post in posts"
:key="post.id"
:style="{ backgroundColor:
background(post.id) }"
class="post"
>
<b-row class="row1">
<p class="title">
Title - {{ post.title }}
</p>
<p class="body"
:title="post.body"
>
Description - {{ post.body.slice(0, 70) +
"..." }}
</p>
</b-row>
</b-card>
</div>
</template>
<script>
export default {
name: "basePost",
props: ["posts"],
methods: {
background: function(postId) {
return postId % 2 == 0 ? "#B5E0D9" :
"#FFE6E6";
},
},
};
</script>
We have used , < b-row / >, and < b-col / >
from the bootstrap-vue.
All the posts will be displayed using posts
prop with Post Title and Post Description.
service.js
We will import ‘axios’ to fetch the data from
the base URL –
https://jsonplaceholder.typicode.com/
We will create an Axios instance using the
‘create()’ method where the resource is
accessed via baseURL prop.
Now, let’s see the implementation of API
using Axios in the service.js file.
import axios from 'axios';
export const Service = axios.create({
baseURL:
`https://jsonplaceholder.typicode.com/`
})
After implementing the Basic Routing using
Vue Router, the UI so far will look like this
(excluding style) –
Now, let’s see the dynamic routing.
3) Dynamic Routing
When we click on the post, we want to post
details to be displayed. And fetch respective
data we will use its post.id.
We will create one component named
PostDetails, and a few make changes in
router/index.js and BasePost.vue
router/index.js
Now, whenever route ‘/post/:id’ will hit, the
PostDetails component will render. As said
before, with the click of any post title, we
will send its id to the route. To implement
this, open the file BasePost.vue and write
this code.
BasePost.vue
{
path: '/posts/:id',
component: PostDetails
},
<p class="title">
<router-link
:to="'/posts/' + post.id"
>
Title - {{ post.title }}
</router-link>
</p>
Moving towards the PostDetails
component.
PostDetails.vue
<template>
<div>
<b-container
:style="{ backgroundColor:
background(this.postId) }"
v-if="postDetails"
>
<b-row>
<b-col cols="12">
<h1>{{ postDetails.title }}</h1>
</b-col>
</b-row>
<div class="postBody">
<b-row align-h="center">
<b-col cols="10">
<p>{{ postDetails.body }}</p>
</b-col>
</b-row>
</div>
<b-row>
<b-col cols="12" class="commentTitle">
<h2 style="font-weight:
500">Comments</h2>
</b-col>
<base-comment
:comments="allComments"></base-
comment>
</b-row>
</b-container>
<h3 v-else>Loading....</h3>
</div>
</template>
<script>
import { Service } from "../../service.js";
import baseComment from
"../ui/BaseComment.vue";
export default {
name: "PostDetails",
components: {
baseComment,
},
mounted() {
this.getPostDetails();
this.getComments();
},
data() {
return {
postId: this.$route.params.id,
postDetails: null,
allComments: [],
};
},
methods: {
getPostDetails() {
Service.get(`posts/${this.postId}`)
.then((res) => {
this.postDetails = {
...res.data,
};
this.getUserDetails(this.postDetails.userI
d);
})
.catch((error) => console.log(error));
},
getComments() {
Service.get(`comments?
postId=${this.postId}`).then((res) => {
this.allComments = res.data;
});
},
background: function(postId) {
return postId % 2 == 0 ? "#B5E0D9" :
"#FFE6E6";
},
},
};
</script>
Post details will consist of the post title,
post description, and post comments. To
display that, we will use components from
bootstrap-vue.
Two API calls are made using the imported
Service component –
– To fetch post details
getPostDetails() {
Service.get(`posts/${this.postId}`)
.then((res) => {
this.postDetails = {
...res.data,
};
})
.catch((error) => console.log(error));
},
– To fetch post comments
getComments() {
Service.get(`comments?
postId=${this.postId}`)
.then((res) => {
this.allComments = res.data;
})
.catch((error) => console.log(error));
},
As we will be having a lot of comments
related to a single post, we will create a
whole new component for displaying
comments named BaseComment.vue
ui/BaseComment.vue
The component will show the comments
related to the respective post.
<template>
<div>
<b-col cols="12" v-if="comments">
<b-col cols="10" v-for="comment in
comments"
:key="comment.id" class="comment">
{{ comment.body }}
</b-col>
</b-col>
<h5 v-else>Loading....</h5>
</div>
</template>
<script>
export default {
name: "baseComment",
props: ["comments"],
};
</script>
After implementing Dynamic Routing, the
UI will be something like this (excluding
style) –
Heading towards the last section of Vue
Router Tutorial – implementation of Page
not found.
4) Implementing Page Not Found
Create a component named –
PageNotFound.vue inside the pages folder
and make the required changes in
router/index.js.
{
path: '*', component: PageNotFound
}
PageNotFound.vue
<template>
<h1>You have entered a wrong url.
Try going to <router-link to="/">Home
Page</router-link>.</h1>
</template>
<script>
export default {
name: 'PageNotFound'
}
</script>
router/index.js
PageNotFound component will render
whenever an invalid route hits.
You can find the entire source code here:
vue-router-example
Conclusion
So, this was all about implementing a basic
and dynamic Vue Routing tutorial with the
help of Vue Router. I hope your purpose
was served by landing on this blog post. You
can learn more about VueJS by reading
VueJS tutorials.
If you are looking for a helping hand for
your ongoing or new Vue.js project, get in
touch with us to hire VueJS developer of
your choice with the desired skill set. We
have 40+ dedicated Vue.js developers
available for hire.
www.bacancytechnology.com
Thank You

More Related Content

PDF
Vue.js is boring - and that's a good thing
ODP
An Introduction to Vuejs
PDF
Vue, vue router, vuex
PPTX
Vue 2.0 + Vuex Router & Vuex at Vue.js
PPTX
Vue business first
PPTX
How to Build SPA with Vue Router 2.0
PDF
An introduction to Vue.js
Vue.js is boring - and that's a good thing
An Introduction to Vuejs
Vue, vue router, vuex
Vue 2.0 + Vuex Router & Vuex at Vue.js
Vue business first
How to Build SPA with Vue Router 2.0
An introduction to Vue.js

What's hot (20)

PDF
Why Vue.js?
PDF
Vue 淺談前端建置工具
PDF
Love at first Vue
PDF
PDF
Vue js 大型專案架構
PDF
Vue js and Vue Material
PDF
Using VueJS in front of Drupal 8
PDF
Introduction to VueJS & Vuex
PDF
Vue JS Intro
PDF
Vue.js
PDF
Room with a Vue - Introduction to Vue.js
PDF
The Point of Vue - Intro to Vue.js
PDF
Modern frontend development with VueJs
PDF
Enjoy the vue.js
PDF
VueJS Introduction
PPT
Vue.js Getting Started
PPTX
Vue presentation
PDF
第一次用 Vue.js 就愛上 [改]
PDF
Scalable Front-end Development with Vue.JS
PPTX
SpringBoot with MyBatis, Flyway, QueryDSL
Why Vue.js?
Vue 淺談前端建置工具
Love at first Vue
Vue js 大型專案架構
Vue js and Vue Material
Using VueJS in front of Drupal 8
Introduction to VueJS & Vuex
Vue JS Intro
Vue.js
Room with a Vue - Introduction to Vue.js
The Point of Vue - Intro to Vue.js
Modern frontend development with VueJs
Enjoy the vue.js
VueJS Introduction
Vue.js Getting Started
Vue presentation
第一次用 Vue.js 就愛上 [改]
Scalable Front-end Development with Vue.JS
SpringBoot with MyBatis, Flyway, QueryDSL
Ad

Similar to Vue routing tutorial getting started with vue router (20)

PDF
Vuejs for Angular developers
PDF
Building a Single Page Application with VueJS
PPTX
A New Vue for Web Development
PDF
Bermon Painter - Rapid Prototyping with Vue.js - Codemotion Rome 2019
PPTX
Vue js and Dyploma
PDF
How to Build ToDo App with Vue 3 + TypeScript
PPTX
VueJs Workshop
PDF
Vue fundamentasl with Testing and Vuex
PPTX
Single Page Web Applications with WordPress REST API
PPTX
Don't Over-React - just use Vue!
PDF
Intro to VueJS Workshop
PPTX
Level up apps and websites with vue.js
PPTX
Level up apps and websites with vue.js
PDF
Introduction to Vue.js
PDF
VueJS: The Simple Revolution
PDF
Progressive Javascript: Why React when you can Vue?
PDF
Vue js 2.x
PPTX
Server Side Rendering with Nuxt.js
PDF
VueJS Best Practices
PDF
Nuxtjs cheat-sheet
Vuejs for Angular developers
Building a Single Page Application with VueJS
A New Vue for Web Development
Bermon Painter - Rapid Prototyping with Vue.js - Codemotion Rome 2019
Vue js and Dyploma
How to Build ToDo App with Vue 3 + TypeScript
VueJs Workshop
Vue fundamentasl with Testing and Vuex
Single Page Web Applications with WordPress REST API
Don't Over-React - just use Vue!
Intro to VueJS Workshop
Level up apps and websites with vue.js
Level up apps and websites with vue.js
Introduction to Vue.js
VueJS: The Simple Revolution
Progressive Javascript: Why React when you can Vue?
Vue js 2.x
Server Side Rendering with Nuxt.js
VueJS Best Practices
Nuxtjs cheat-sheet
Ad

More from Katy Slemon (20)

PDF
React Alternatives Frameworks- Lightweight Javascript Libraries.pdf
PDF
Data Science Use Cases in Retail & Healthcare Industries.pdf
PDF
How Much Does It Cost To Hire Golang Developer.pdf
PDF
What’s New in Flutter 3.pdf
PDF
Why Use Ruby On Rails.pdf
PDF
How Much Does It Cost To Hire Full Stack Developer In 2022.pdf
PDF
How to Implement Middleware Pipeline in VueJS.pdf
PDF
How to Build Laravel Package Using Composer.pdf
PDF
Sure Shot Ways To Improve And Scale Your Node js Performance.pdf
PDF
How to Develop Slack Bot Using Golang.pdf
PDF
IoT Based Battery Management System in Electric Vehicles.pdf
PDF
Understanding Flexbox Layout in React Native.pdf
PDF
The Ultimate Guide to Laravel Performance Optimization in 2022.pdf
PDF
New Features in iOS 15 and Swift 5.5.pdf
PDF
How to Hire & Manage Dedicated Team For Your Next Product Development.pdf
PDF
Choose the Right Battery Management System for Lithium Ion Batteries.pdf
PDF
Flutter Performance Tuning Best Practices From the Pros.pdf
PDF
Angular Universal How to Build Angular SEO Friendly App.pdf
PDF
How to Set Up and Send Mails Using SendGrid in NodeJs App.pdf
PDF
Ruby On Rails Performance Tuning Guide.pdf
React Alternatives Frameworks- Lightweight Javascript Libraries.pdf
Data Science Use Cases in Retail & Healthcare Industries.pdf
How Much Does It Cost To Hire Golang Developer.pdf
What’s New in Flutter 3.pdf
Why Use Ruby On Rails.pdf
How Much Does It Cost To Hire Full Stack Developer In 2022.pdf
How to Implement Middleware Pipeline in VueJS.pdf
How to Build Laravel Package Using Composer.pdf
Sure Shot Ways To Improve And Scale Your Node js Performance.pdf
How to Develop Slack Bot Using Golang.pdf
IoT Based Battery Management System in Electric Vehicles.pdf
Understanding Flexbox Layout in React Native.pdf
The Ultimate Guide to Laravel Performance Optimization in 2022.pdf
New Features in iOS 15 and Swift 5.5.pdf
How to Hire & Manage Dedicated Team For Your Next Product Development.pdf
Choose the Right Battery Management System for Lithium Ion Batteries.pdf
Flutter Performance Tuning Best Practices From the Pros.pdf
Angular Universal How to Build Angular SEO Friendly App.pdf
How to Set Up and Send Mails Using SendGrid in NodeJs App.pdf
Ruby On Rails Performance Tuning Guide.pdf

Recently uploaded (20)

PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
KodekX | Application Modernization Development
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
CroxyProxy Instagram Access id login.pptx
PDF
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
PDF
Reimagining Insurance: Connected Data for Confident Decisions.pdf
PPTX
Cloud computing and distributed systems.
PPTX
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
DevOps & Developer Experience Summer BBQ
PDF
Chapter 2 Digital Image Fundamentals.pdf
PDF
SAP855240_ALP - Defining the Global Template PUBLIC.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Modernizing your data center with Dell and AMD
PPTX
Big Data Technologies - Introduction.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Transforming Manufacturing operations through Intelligent Integrations
PDF
cuic standard and advanced reporting.pdf
PDF
CIFDAQ's Market Wrap: Ethereum Leads, Bitcoin Lags, Institutions Shift
PDF
NewMind AI Monthly Chronicles - July 2025
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
KodekX | Application Modernization Development
NewMind AI Weekly Chronicles - August'25 Week I
CroxyProxy Instagram Access id login.pptx
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
Reimagining Insurance: Connected Data for Confident Decisions.pdf
Cloud computing and distributed systems.
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Chapter 3 Spatial Domain Image Processing.pdf
DevOps & Developer Experience Summer BBQ
Chapter 2 Digital Image Fundamentals.pdf
SAP855240_ALP - Defining the Global Template PUBLIC.pdf
MYSQL Presentation for SQL database connectivity
Modernizing your data center with Dell and AMD
Big Data Technologies - Introduction.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Transforming Manufacturing operations through Intelligent Integrations
cuic standard and advanced reporting.pdf
CIFDAQ's Market Wrap: Ethereum Leads, Bitcoin Lags, Institutions Shift
NewMind AI Monthly Chronicles - July 2025

Vue routing tutorial getting started with vue router

  • 1. Vue Routing Tutorial: Getting started with Vue Router Please bring clothes, food and medical supplies, and beddings! www.bacancytechnology.com
  • 2. VueJS is a robust and most progressive Javascript framework used for developing dynamic and excellent front-end applications. VueJS is also famous for building SPAs (Single Page Applications). Rather than making requests to the back- end and rendering the respective pages at the front-end, VueJS provides a Vue Router library to manage the mechanism known as ‘routing.’ This provides a better user experience and improves application responsiveness. In this tutorial, we will learn how to implement Vue Router with our simple Single Page Application. We will develop a small demo application that will have a few pages linked through Vue Router. I’m assuming that you’re already familiar with VueJS. So, let’s begin our journey!
  • 3. CONTENTS 1. Goal of Vue Routing Tutorial 2. Vue Router Example: Steps to implement Vue Routing 3. Conclusion
  • 5. https://youtu.be/4xAIuvAkJWY We will build a demo blog application that will consist of posts (title/description) and comments (related to the post). We will retrieve data using Axios. And for that, we will use these APIs –
  • 6. To fetch posts – To fetch post details of post 1 – To fetch comments of post 1 – https://jsonplaceholder.typicode.com/posts https://jsonplaceholder.typicode.com/posts /1. https://jsonplaceholder.typicode.com/com ments?postId=1. Each row consists of a blog post. On clicking the blog, we will be able to view comments and post details.
  • 8. Project Setup Create components Linking components using Vue Router Dynamic Routing Implementing Page Not Found We have divided the steps into four sections- Follow this step-by-step guide to implement Vue Routing. Install vue-cli 1) Project Setup npm install --global vue-cli
  • 9. Create a new project Install dependencies vue create vue-router-example When the questions are prompted on your terminal, ensure your answer is “yes” for vue-router installation. cd vue-router-example npm install axios bootstrap-vue Run the server npm run serve After running the above command, you’ll see the default screen on http://localhost:8080/.
  • 10. 2) Create Components Before moving forward, have a look at the folder structure of vue-router-example
  • 11. (Folder structure can vary from person to person) Note down the file names and copy-paste the code, respectively. main.js Import IconsPlugin,BCard,BContainer,BCol, and BRow from ‘bootstrap-vue’ import Vue from 'vue' import App from './App.vue' import router from './router' import { IconsPlugin, BCard, BContainer, BCol, BRow, } from "bootstrap-vue";
  • 12. import 'bootstrap/dist/css/bootstrap.css' import 'bootstrap-vue/dist/bootstrap- vue.css' Vue.use(IconsPlugin) Vue.component("b-card", BCard); Vue.component("b-container", BContainer); Vue.component("b-col", BCol); Vue.component("b-row", BRow); Vue.config.productionTip = false new Vue({ router, render: h => h(App) }).$mount('#app')
  • 13. App.vue The default UI will consist of Home Link and the view based on the routes hit. On clicking Home the UI will be redirected to ‘/’ and display the respective component from file router/index.js. < router-view /> will let us know which route will display which component. <template> <div id="app"> <div id="nav"> <router-link to="/">Home</router-link> </div> <router-view/> </div> </template>
  • 14. router/index.js Import vue-router package to set the navigating to the components. There are in- total five routes, but primarily we will cover the first two routes for setting up the basic routing. import Vue from 'vue' import VueRouter from 'vue-router' import Posts from "../components/pages/Posts.vue"; Vue.use(VueRouter) const routes = [ { path: '/', redirect: '/posts' }, { path: '/posts', component: Posts, }, ]
  • 15. const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) export default router /’ defines the default view, here Home page. We will redirect ‘/’ to ‘/posts’ which will display component Posts. Now, let’s see what the Posts component has?
  • 16. pages/Posts.vue <template> <div> <base-post :posts="allPosts"></base-post> </div> </template> <script> import { Service } from "../../service.js"; import BasePost from '../ui/BasePost.vue'; export default { components: { BasePost }, name: 'Posts', created() { this.getAllPosts(); },
  • 17. data() { return { allPosts: [], } }, methods: { getAllPosts() { Service.get(`posts`) .then(res => { this.allPosts = res.data; }) .catch(error => console.log(error)); }, } } </script> We have imported
  • 18. BasePost from ui/BasePost for displaying the user interface of all the posts Service from service.js to access the remote data using Service.get(‘posts’). On resolving the promise, we will store the response in the array named allPosts, and if the promise is rejected, we will simply console the error. Now let’s see what BasePost.vue component and service.js has? ui/BasePost.vue
  • 19. <template> <div> <b-card v-for="post in posts" :key="post.id" :style="{ backgroundColor: background(post.id) }" class="post" > <b-row class="row1"> <p class="title"> Title - {{ post.title }} </p> <p class="body" :title="post.body" > Description - {{ post.body.slice(0, 70) + "..." }} </p> </b-row> </b-card>
  • 20. </div> </template> <script> export default { name: "basePost", props: ["posts"], methods: { background: function(postId) { return postId % 2 == 0 ? "#B5E0D9" : "#FFE6E6"; }, }, }; </script> We have used , < b-row / >, and < b-col / > from the bootstrap-vue. All the posts will be displayed using posts prop with Post Title and Post Description.
  • 21. service.js We will import ‘axios’ to fetch the data from the base URL – https://jsonplaceholder.typicode.com/ We will create an Axios instance using the ‘create()’ method where the resource is accessed via baseURL prop. Now, let’s see the implementation of API using Axios in the service.js file. import axios from 'axios'; export const Service = axios.create({ baseURL: `https://jsonplaceholder.typicode.com/` }) After implementing the Basic Routing using Vue Router, the UI so far will look like this (excluding style) –
  • 22. Now, let’s see the dynamic routing. 3) Dynamic Routing When we click on the post, we want to post details to be displayed. And fetch respective data we will use its post.id. We will create one component named PostDetails, and a few make changes in router/index.js and BasePost.vue router/index.js
  • 23. Now, whenever route ‘/post/:id’ will hit, the PostDetails component will render. As said before, with the click of any post title, we will send its id to the route. To implement this, open the file BasePost.vue and write this code. BasePost.vue { path: '/posts/:id', component: PostDetails }, <p class="title"> <router-link :to="'/posts/' + post.id" > Title - {{ post.title }} </router-link> </p>
  • 24. Moving towards the PostDetails component. PostDetails.vue <template> <div> <b-container :style="{ backgroundColor: background(this.postId) }" v-if="postDetails" > <b-row> <b-col cols="12"> <h1>{{ postDetails.title }}</h1> </b-col> </b-row> <div class="postBody"> <b-row align-h="center"> <b-col cols="10"> <p>{{ postDetails.body }}</p> </b-col>
  • 25. </b-row> </div> <b-row> <b-col cols="12" class="commentTitle"> <h2 style="font-weight: 500">Comments</h2> </b-col> <base-comment :comments="allComments"></base- comment> </b-row> </b-container> <h3 v-else>Loading....</h3> </div> </template> <script> import { Service } from "../../service.js"; import baseComment from "../ui/BaseComment.vue";
  • 26. export default { name: "PostDetails", components: { baseComment, }, mounted() { this.getPostDetails(); this.getComments(); }, data() { return { postId: this.$route.params.id, postDetails: null, allComments: [], }; }, methods: { getPostDetails() { Service.get(`posts/${this.postId}`) .then((res) => { this.postDetails = { ...res.data,
  • 27. }; this.getUserDetails(this.postDetails.userI d); }) .catch((error) => console.log(error)); }, getComments() { Service.get(`comments? postId=${this.postId}`).then((res) => { this.allComments = res.data; }); }, background: function(postId) { return postId % 2 == 0 ? "#B5E0D9" : "#FFE6E6"; }, }, }; </script>
  • 28. Post details will consist of the post title, post description, and post comments. To display that, we will use components from bootstrap-vue. Two API calls are made using the imported Service component – – To fetch post details getPostDetails() { Service.get(`posts/${this.postId}`) .then((res) => { this.postDetails = { ...res.data, }; }) .catch((error) => console.log(error)); },
  • 29. – To fetch post comments getComments() { Service.get(`comments? postId=${this.postId}`) .then((res) => { this.allComments = res.data; }) .catch((error) => console.log(error)); }, As we will be having a lot of comments related to a single post, we will create a whole new component for displaying comments named BaseComment.vue ui/BaseComment.vue The component will show the comments related to the respective post.
  • 30. <template> <div> <b-col cols="12" v-if="comments"> <b-col cols="10" v-for="comment in comments" :key="comment.id" class="comment"> {{ comment.body }} </b-col> </b-col> <h5 v-else>Loading....</h5> </div> </template> <script> export default { name: "baseComment", props: ["comments"], }; </script>
  • 31. After implementing Dynamic Routing, the UI will be something like this (excluding style) – Heading towards the last section of Vue Router Tutorial – implementation of Page not found. 4) Implementing Page Not Found Create a component named – PageNotFound.vue inside the pages folder and make the required changes in router/index.js.
  • 32. { path: '*', component: PageNotFound } PageNotFound.vue <template> <h1>You have entered a wrong url. Try going to <router-link to="/">Home Page</router-link>.</h1> </template> <script> export default { name: 'PageNotFound' } </script> router/index.js PageNotFound component will render whenever an invalid route hits. You can find the entire source code here: vue-router-example
  • 34. So, this was all about implementing a basic and dynamic Vue Routing tutorial with the help of Vue Router. I hope your purpose was served by landing on this blog post. You can learn more about VueJS by reading VueJS tutorials. If you are looking for a helping hand for your ongoing or new Vue.js project, get in touch with us to hire VueJS developer of your choice with the desired skill set. We have 40+ dedicated Vue.js developers available for hire.