Vue Dynamic Components
Apr 22, 2020
Vue's component
component can dynamically render a different component based on the state of your data. The is
attribute is how you can tell component
what component to render. For example, below is a simple tab UI:
The above tabbed UI consists of 3 different Vue components: home
, about
, and contact
.
Vue.component('home', { template: '<div>This is the home tab</div>' }); Vue.component('about', { template: '<div>This tab talks about us</div>' }); Vue.component('contact', { template: '<div>This tab provides contact info</div>' });
Using component
and :is
, Vue can render different components based on the state of tab
:
<component class="tab-content" :is="tab"></component>
Whenever tab
changes, Vue changes what component is rendered. Below is the full Vue app that handles the state of tab
.
const app = new Vue({ data: () => ({ tab: 'home' }), methods: { selected: function(tab) { return tab === this.tab ? 'selected' : ''; } }, template: ` <div> <div class="buttons"> <button @click="tab = 'home'" :class="selected('home')"> Home </button> <button @click="tab = 'about'" :class="selected('about')"> About Us </button> <button @click="tab = 'contact'" :class="selected('contact')"> Contact Us </button> </div> <component class="tab-content" :is="tab"></component> </div> ` }); app.$mount('#vue-tab-example');
Vue School has some of our favorite Vue video courses. Their Vue.js Master Class walks you through building a real world application, and does a great job of teaching you how to integrate Vue with Firebase. Check it out!
Did you find this tutorial useful? Say thanks by starring our repo on GitHub!