Reputation: 55
My problem is, there are a few templates on a component. And I want to call on same component. For example:
<template>
<div>
[I WANT TO USE FIRST TEMPLATE]
</div>
<template>First</template> //First Template
<template>Second</template> //Second Template
</template>
Upvotes: 1
Views: 849
Reputation: 2474
Ihsan Fajar Ramadhan's answer is one way of doing it. But, there is another better way of conditional rendering of components like below:
<template>
<div>
<button v-on:click="setSelected('comp1')">Comp1</button>
<button v-on:click="setSelected('comp2')">Comp2</button>
<component :is="selected"></component>
</div>
</template>
<script>
import comp1 from './comp1.vue';
import comp2 from './comp2.vue';
export default {
components : {
'comp1' : comp1,
'comp2' : comp2
},
data(){
return {
selected : 'comp1'
},
methods: {
setSelected(tab){
this.selected = tab;
}
}
}
</script>
Upvotes: 1
Reputation: 1033
if you want to render them conditionally, you can use v-if
directive. for the example:
<template>
<div>
[I WANT TO USE FIRST TEMPLATE]
</div>
<template v-if="fistCondition">First</template> //First Template
<template v-else>Second</template> //Second Template
</template>
or
<template>
<div>
[I WANT TO USE FIRST TEMPLATE]
</div>
<template v-if="fistCondition">First</template> //First Template
<template v-else-if="secondCondition">Second</template> //Second Template
</template>
Upvotes: 0