I would like to make a custom component in Vue with the following props:
< sidebar-link text="Home" icon="fa-home">
I have the following .Vue template for my component.
<template>
<div id="sidebarItem">
<a href="/index.php">
<div id="sidebarIcon"><i :class="{fa : true}" aria-hidden="true"></i></div>
<div id="sidebarText">{{ text }}</div>
</a>
</div>
</template>
<script>
export default {
props: ['text', 'icon'],
data () {return {}}
}
</script>
Essentially I have the default Font-Awesome code in my template:
<i class="fa fa-home" aria-hidden="true"></i>
and I want add a class to my component by using it's prop.
<sidebar-link text="Home" icon="fa-home"></sidebar-link>
thanks.
If you want to add fa-home
to your you can pass it on the parent component like:
<sidebar-link text="Home" :icon="'fa-home'"></sidebar-link>
You can pass other icons like fa-plus
, fa-blutooth
.... instead
And use it inside your component as:
<div id="sidebarIcon">
<i class='fa' :class="icon" aria-hidden="true"></i>
</div>
tbh: makes a little sense for me why you need to keep fa
You still need a prop maybe with default value of ''
though
icon: {
type: String,
required: false,
default: ''
}
So when your property icon
is holding the value home
you can use some class binding like the following (Thank god js expression are allowed within attributes in Vue.js):
v-bind:class="[{'fa': true}, icon ? 'fa-' + icon : '']"
or even shorter
:class="[{'fa': true}, icon ? 'fa-' + icon : '']"
This will result in
class="fa fa-home"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With