Show different component using select option

Viewed 159

I need to show different components depending on the selected option. I don’t know how to write the code for showing component one or two. Are there any examples available?

<template>
  <div class="col-md-3 md-form mr-2">
    <i class="fa fa-envelope prefix grey-text"></i>
    <label class="font-weight-light mb-2">Component</label>
    <select v-model="comp" class="form-control">
      <option value="">Select your component to show</option>
      <option value="">Show component 1</option>
      <option value="SentenceSelected">Show component 2</option>
    </select>
  </div>
</template>
import SuspensionSelected from '../precautonary/mix/SuspensionSelected'
import SentenceSelected from '../precautonary/mix/SentenceSelected'

export default {
  name: "PrecautionCreate",
  components: {
    SuspensionSelected,
    SentenceSelected
  },
  data: () => ({
    selectedyear: '',
    selectedcause:'',
    comp: ''  
  })
};

enter image description here

1 Answers

You can use a dynamic component:

<component :is="comp"></component>

Demo:

SuspensionSelected = {
  template: `<div>Suspension Component</div>`
}

SentenceSelected = {
  template: `<div>Sentence Component</div>`
}

new Vue({
  el: "#app",
  name: "PrecautionCreate",
  components: {
    SuspensionSelected,
    SentenceSelected
  },
  data: () => ({
    selectedyear: '',
    selectedcause:'',
    comp: ''  
  })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <i class="fa fa-envelope prefix grey-text"></i>
  <label class="font-weight-light mb-2">Component</label>
  <select v-model="comp" class="form-control">
    <option value="">Select your component to show</option>
    <option value="SuspensionSelected">Suspension</option>
    <option value="SentenceSelected">Sentence</option>
  </select>

  <component :is="comp"></component>
</div>

Related