I currently have a Vue component that I use in one part of my application. I want to use this same component in another part of my application; however, I would like to make some minor changes to the CSS (change background colors etc.).
The easy but repetitive method would be to simply copy and paste the component into a new .vue file and make the respective CSS changes; however, is there a better way of achieving this effect?
Ideally, I want to be able to create a new Vue component, which imports the entire template as well as methods, props etc. I’ve looked into using extends; however, it doesn’t import the Vue template – just the functionality.
Advertisement
Answer
You can pass a css class name as props :
Vue.component('my-component', { template: '#my-component', props: ['styled'] }) new Vue({ el: '#app', })
body { font-family: "Montserrat" } .card { border-radius: 8px; margin: 20px; padding: 30px 40px; } .first-component { background-color: #FFBF88; font-size: 16px; font-weight: bold; } .second-component { background-color: #C4E0F1; font-size: 12px; text-align: right; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script> <div id="app"> <my-component styled="first-component"></my-component> <my-component styled="second-component"></my-component> </div> <template id="my-component"> <div class="card" :class="styled"> I'm the same component </div> </template>