当前位置:首页 > VUE

vue 实现评分

2026-03-07 09:33:25VUE

实现评分功能的几种方法

使用第三方库(如vue-star-rating)

安装vue-star-rating库:

npm install vue-star-rating

在组件中使用:

<template>
  <star-rating 
    v-model="rating"
    :increment="0.5"
    :star-size="30"
  />
</template>

<script>
import StarRating from 'vue-star-rating'

export default {
  components: { StarRating },
  data() {
    return {
      rating: 0
    }
  }
}
</script>

自定义评分组件

创建一个可复用的评分组件:

<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star"
      @click="setRating(star)"
      @mouseover="hoverRating = star"
      @mouseleave="hoverRating = 0"
    >
      {{ star <= (hoverRating || rating) ? '★' : '☆' }}
    </span>
  </div>
</template>

<script>
export default {
  props: {
    maxStars: {
      type: Number,
      default: 5
    },
    initialRating: {
      type: Number,
      default: 0
    }
  },
  data() {
    return {
      rating: this.initialRating,
      hoverRating: 0
    }
  },
  methods: {
    setRating(star) {
      this.rating = star
      this.$emit('rating-selected', star)
    }
  }
}
</script>

<style>
.star-rating span {
  font-size: 24px;
  color: gold;
  cursor: pointer;
}
</style>

使用Element UI的Rate组件

安装Element UI:

npm install element-ui

在main.js中引入:

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

在组件中使用:

<template>
  <el-rate
    v-model="rating"
    :colors="['#99A9BF', '#F7BA2A', '#FF9900']"
    :max="10"
    show-text
  />
</template>

<script>
export default {
  data() {
    return {
      rating: 0
    }
  }
}
</script>

实现半星评分功能

修改自定义组件支持半星:

<template>
  <div class="star-rating">
    <span 
      v-for="star in stars" 
      :key="star.index"
      @click="setRating(star.value)"
      @mouseover="hoverRating = star.value"
      @mouseleave="hoverRating = 0"
    >
      <span v-if="star.isHalf">½</span>
      <span v-else>{{ star.isFilled ? '★' : '☆' }}</span>
    </span>
  </div>
</template>

<script>
export default {
  props: {
    maxStars: {
      type: Number,
      default: 5
    },
    increment: {
      type: Number,
      default: 0.5
    }
  },
  computed: {
    stars() {
      const stars = []
      for (let i = 1; i <= this.maxStars; i += this.increment) {
        stars.push({
          index: i,
          value: i,
          isHalf: i % 1 !== 0,
          isFilled: i <= this.currentRating
        })
      }
      return stars
    },
    currentRating() {
      return this.hoverRating || this.rating
    }
  },
  data() {
    return {
      rating: 0,
      hoverRating: 0
    }
  },
  methods: {
    setRating(rating) {
      this.rating = rating
      this.$emit('input', rating)
    }
  }
}
</script>

带文字描述的评分

在评分旁添加文字描述:

vue 实现评分

<template>
  <div>
    <star-rating v-model="rating" />
    <div class="rating-text">
      {{ ratingText }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      rating: 0,
      texts: ['很差', '差', '一般', '好', '很好']
    }
  },
  computed: {
    ratingText() {
      return this.texts[Math.ceil(this.rating) - 1] || ''
    }
  }
}
</script>

以上方法提供了从简单到复杂的多种实现方案,可根据项目需求选择合适的实现方式。第三方库方案适合快速开发,自定义组件方案则提供更大的灵活性。

标签: 评分vue
分享给朋友:

相关文章

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心机制基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)。以下是具体实现方法: 基于 Vue…

实现vue组件

实现vue组件

Vue 组件的基本实现 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种方式: 单文件组件 (SFC) 使用 .vue 文件格式,…

vue实现标签

vue实现标签

Vue 实现标签的方法 在 Vue 中实现标签功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 动态组件可以根据不同的条件渲染不同的标签内容。通过 :is 属性动态绑定组件名,实现标签…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <template&…