How to create dynamic tag based on props with Vue 2 How to create dynamic tag based on props with Vue 2 vue.js vue.js

How to create dynamic tag based on props with Vue 2


You can use a built-in component element like so:

<component is="ul" class="foo" style="color:red">  anything inside component</component>

See: https://vuejs.org/v2/guide/components.html#Dynamic-Components


EDIT: Please check @krukid answer, it is a better solution, I didn't know about component element when I answered

Render function ways:

You need to create a "wrapper component" that use a render function.

import Vue from 'vue';Vue.component('wrapper-component', {  name: 'wrapper-component',  render(createElement) {    return createElement(      this.tag,   // tag name      this.$slots.default // array of children    );  },  props: {    tag: {      type: String,      required: true,    },  },});

then in any other template just use as follows

<wrapper-component tag="div">  <span>All this will be rendered to inside a div</span>  <p>    All   </p></wrapper-component>

and that should render to this

<div>  <span data-v-4fcf631e="">All this will be rendered to inside a div</span>   <p data-v-4fcf631e="">    All   </p></div>

To know more about render functions please see official documentation