当前位置:首页 > VUE

vue评分实现

2026-02-10 01:05:30VUE

实现 Vue 评分功能

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

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

安装库:

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>

自定义评分组件

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

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

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue实现看板

vue实现看板

Vue 实现看板功能 使用 Vue 实现看板功能可以通过组件化开发、状态管理和拖拽库结合完成。以下是一个完整的实现方案: 基础项目结构 src/ ├── components/ │ ├── K…

vue实现定时

vue实现定时

Vue 实现定时功能的方法 使用 setInterval 和 clearInterval 在 Vue 中可以通过 setInterval 和 clearInterval 实现定时功能。在组件的 mou…