当前位置:首页 > VUE

vue评分实现

2026-02-10 01:05:30VUE

实现 Vue 评分功能

在 Vue 中实现评分功能可以通过自定义组件或使用第三方库完成。以下是两种常见的实现方式:

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

安装库:

vue评分实现

npm install vue-star-rating

在组件中使用:

<template>
  <star-rating 
    v-model="rating" 
    :increment="0.5" 
    :show-rating="false"
  />
</template>

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

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

自定义评分组件

通过动态渲染星星图标实现:

vue评分实现

<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star" 
      @click="setRating(star)"
    >
      {{ star <= currentRating ? '★' : '☆' }}
    </span>
    <p>{{ currentRating }} of {{ maxStars }}</p>
  </div>
</template>

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

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

实现半星评分

扩展自定义组件以支持半星:

<template>
  <div class="star-rating">
    <span 
      v-for="star in starsArray" 
      :key="star.index"
      @click="setRating(star.index)"
      @mousemove="setPreview(star.index)"
      @mouseleave="resetPreview"
    >
      {{ star.isFull ? '★' : '☆' }}
    </span>
  </div>
</template>

<script>
export default {
  props: {
    maxStars: { type: Number, default: 5 },
    value: { type: Number, default: 0 }
  },
  data() {
    return {
      previewRating: 0
    };
  },
  computed: {
    starsArray() {
      return Array.from({ length: this.maxStars }, (_, i) => ({
        index: i + 1,
        isFull: this.previewRating >= i + 1 || 
               (!this.previewRating && this.value >= i + 1)
      }));
    }
  },
  methods: {
    setRating(rating) {
      this.$emit('input', rating);
    },
    setPreview(rating) {
      this.previewRating = rating;
    },
    resetPreview() {
      this.previewRating = 0;
    }
  }
};
</script>

动态颜色和大小

通过 props 控制样式:

<template>
  <span 
    :style="{
      color: starColor,
      fontSize: starSize + 'px'
    }"
  >
    {{ star <= currentRating ? '★' : '☆' }}
  </span>
</template>

<script>
export default {
  props: {
    starColor: { type: String, default: 'gold' },
    starSize: { type: Number, default: 24 }
  }
};
</script>

这些方法提供了从简单到高级的评分组件实现方案,可根据项目需求选择合适的方式。第三方库适合快速集成,自定义组件则提供更大的灵活性和控制权。

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

相关文章

vue实现帖子

vue实现帖子

Vue 实现帖子功能 使用 Vue 实现帖子功能需要结合前端框架和后端数据交互,以下是实现的关键步骤和代码示例。 帖子列表展示 创建帖子列表组件,使用 v-for 渲染帖子数据,通过 axios 获…

vue实现高亮

vue实现高亮

Vue 实现文本高亮的方法 在 Vue 中实现文本高亮可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-html 指令 通过 v-html 指令可以动态插入 HTML 内容,将需要高…

vue实现通知

vue实现通知

Vue 实现通知功能的方法 使用 Vue 实现通知功能可以通过多种方式实现,以下是一些常见的方法: 使用 Vue 的全局事件总线 在 Vue 中可以通过事件总线实现通知功能。创建一个全局事件总线,然…

vue实现复选

vue实现复选

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

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue实现getapp

vue实现getapp

Vue 中实现全局获取应用实例的方法 在 Vue 3 中,可以通过 getCurrentInstance 方法获取当前组件实例,但需要明确其使用场景和限制。以下是具体实现方式: 方法一:通过 get…