vue+自定义组件制作评分效果

130 阅读1分钟
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<style>
* {
margin: 0;
padding: 0;
list-style: none;
}

.star {
color: gold;
}
</style>
</head>
<body>
<div id="app">
{{score1}}---
{{score2}}---
{{score3}}---
<star label="客服态度" :count="8" :score="2" @change="score1=$event"></star>
<star label="物流速度" @change="score2=$event"></star>
<star label="商品质量" @change="score3=$event"></star>
</div>
<script>
// 小程序中的组件
Vue.component("star", {
props:{
label:{
type:String,
required:true
},
count:{
type:Number,
default:5
},
score:{
type:Number,
default:0
}
},
data() {
return {
innerScore:this.score,
tempScore:this.score,
}
},
watch: {
innerScore(val){
this.$emit('change',val)
}
},
template: `
<div>
{{label}}:
<i @mouseleave="tempScore=innerScore" @click='innerScore=item' @mouseenter="tempScore=item" class="fa star "
:class="item<=tempScore?'fa-star':'fa-star-o'" v-for="item in count" aria-hidden="true">
</i></div>
`
})
let vm=new Vue({
el:'#app',
data() {
return {
score1: 0,
score2: 0,
score3: 0,

}
},
methods: {

},
})
</script>

</body>
</html>