You can use Dynamic component combined it with route params.
your components directory:
- /components/ComponentOne.vue
- /components/ComponentTwo.vue
your router
const routes = [
{
path: "/",
name: "Home",
component: Home
},
{ // this route will receive a component name as a parameter
path: "/about/:component",
name: "About",
component: () =>
import(/* webpackChunkName: "about" */ "../views/About.vue"),
params: true
}
];
In your views/About.vue
<template>
<div class="about">
<h1>This is About Page</h1>
<component :is="$route.params.component"></component>
</div>
</template>
<script>
// @ is an alias to /src
import ComponentOne from "@/components/ComponentOne.vue";
import ComponentTwo from "@/components/ComponentTwo.vue";
export default {
name: "Home",
components: {
ComponentOne,
ComponentTwo
}
};
</script>
when you navigate to url:8080/about/ComponentTwo
the about page will show componentTwo.vue
If you dont want to import every component
one option is to create a src/globalComponent.js file and import every global components in that file.
import Vue from "vue";
Vue.component("ComponentOne", () => import("@/components/ComponentOne.vue"));
Vue.component("ComponentTwo", () => import("@/components/ComponentTwo.vue"));
then import to src/main.js
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import "./globalComponents";
Vue.config.productionTip = false;
new Vue({
router,
render: h => h(App)
}).$mount("#app");