Rate component for Vue - Demo. Note: This version for Vue 3. If you want to use for Vue 2.x, please see.
Once, install rate component for your project
npm install vue-rate@next --save
// or yarn add vue-rate@next
Import Vue Rate into your app
import { createApp } from 'vue'
import rate from 'vue-rate'
import 'vue-rate/dist/vue-rate.css'
createApp(App)
.use(rate)
.mount('#app')
Use HTML template
<rate :length="5" />
length {number}
: Star size
<rate :length="5" />
value {number}
: Default value
<rate :length="5" :value="2" />
showcount {boolean}
: Shows rate number when mouseover the star.
<rate :length="5" :value="2" :showcount="true" />
ratedesc {object}
: Rate star description array.
<rate :length="5" :value="2" :ratedesc="['Very bad', 'bad', 'Normal', 'Good', 'Very good']" />
disabled {boolean}
: Disable rate.
<rate :length="5" :value="2" :disabled="true" />
readonly {boolean}
: Read-only rate.
<rate :length="5" :value="2" :readonly="true" />
iconref {string}
: ID of symbol icon
Insert symbol icon into your codebase
<symbol id="icon-heart" class="icon" viewBox="0 0 32 32">
<path d="M23.6 2c-3.363 0-6.258 2.736-7.599 5.594-1.342-2.858-4.237-5.594-7.601-5.594-4.637 0-8.4 3.764-8.4 8.401 0 9.433 9.516 11.906 16.001 21.232 6.13-9.268 15.999-12.1 15.999-21.232 0-4.637-3.763-8.401-8.4-8.401z"></path>
</symbol>
Then add Rate component. iconref
must be symbol's id
<rate :length="5" iconref="icon-heart" />
slot
: Custom icon via slot
You can directly use custom icon via default slot
<rate :length="5" :value="3" :ratedesc="desc" class="viaSlot">
<svg class="icon" width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M12.034 7.074H19.416L13.445 11.448L15.726 18.524L9.75201 14.151L3.77901 18.524L6.06101 11.448L0.0880127 7.075H7.47001L9.75201 0.002V0L12.034 7.075V7.074Z"
fill="currentColor"/>
</svg>
</rate>
Add some flavour
.RateCustom.viaSlot .icon {
width: 25px;
height: 25px;
}
.Rate.viaSlot .Rate__star.filled{color: #813d1a;}
.Rate.viaSlot .Rate__star.hover{color: #E67136;}
v-model
export default {
data: {
return () { myRate: 0 }
}
}
or setup()
in Option API
import { ref } from 'vue';
export default {
setup () {
const myRate = ref(0);
return { myRate }
}
}
or Composition API with <script setup>
<script setup>
import { ref } from 'vue';
const myRate = ref(0);
<script>
And bind to component
<rate :length="5" v-model="myRate" />
<script setup>
function onBeforeRate (rate) {
alert(rate)
}
function onAfterRate (rate) {
alert(rate)
}
</script>
<rate :length="5" :value="2" @before-rate="onBeforeRate" @after-rate="onAftereRate" />
- Fork the project
- Install all dependencies
- Make your changes on
src/Rate.vue
- Build the package
npm run build
# or yarn build
- Commit and create PR
MIT.