返回

为VUE开发人员提供的超简单星级展示和选择组件指南

前端

VUE 实现超简单星级「展示、选择」组件

对于一个前端开发人员来说,组件化开发早已司空见惯,这也让我们养成了很多优秀的编码习惯。比如组件的封装、组件的解耦、组件的复用等等。组件化开发帮助我们提高了开发效率,也使得代码更易维护。

今天,我们来实现一个简单的星级组件,主要分为展示和选择两种模式。

一、需求分析

首先,我们来看一下这个组件的界面设计稿:

[图片]

分析一下组件需要的参数:

属性 含义 默认值 类型
value 当前分数 0 number
max 最大分数 5 number
readonly 是否可选择 false boolean
size 星星大小 20px string
color 星星颜色 #ff0000 string

二、组件实现

首先,我们先来创建组件的模板文件,代码如下:

<template>
  <div class="star-container">
    <span v-for="n in max" :key="n" class="star-item" :class="{ 'active': n <= value }" @click="handleClick(n)">
      <svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
        <path d="M10 18l-6-5.714L7.05 8.286 2 12l5.05-3.714L10 18zm-7-5.714L4.95 12 0 15.714l6 4.286L10 18l5.05-3.714L17 12l-2.95-2.286z" fill="currentColor" />
      </svg>
    </span>
  </div>
</template>

在这个模板文件中,我们使用了 v-for 循环来生成星星,并使用 v-bind:class 来控制星星的样式。当 n 小于或等于 value 时,星星会被激活(active 类)。我们还为每个星星添加了点击事件监听器,以便在用户点击时触发 handleClick 方法。

接下来,我们来编写组件的脚本文件,代码如下:

<script>
export default {
  props: {
    value: {
      type: Number,
      default: 0
    },
    max: {
      type: Number,
      default: 5
    },
    readonly: {
      type: Boolean,
      default: false
    },
    size: {
      type: String,
      default: '20px'
    },
    color: {
      type: String,
      default: '#ff0000'
    }
  },
  methods: {
    handleClick(n) {
      if (this.readonly) return;
      this.$emit('input', n);
    }
  }
};
</script>

在这个脚本文件中,我们定义了组件的属性和方法。其中,value 属性表示当前分数,max 属性表示最大分数,readonly 属性表示是否可选择,size 属性表示星星的大小,color 属性表示星星的颜色。handleClick 方法在用户点击星星时触发,它将星星的索引作为参数传递给父组件。

最后,我们来编写组件的样式文件,代码如下:

<style scoped>
.star-container {
  display: flex;
  justify-content: center;
  align-items: center;
}

.star-item {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 20px;
  height: 20px;
  margin: 0 5px;
  cursor: pointer;
}

.star-item svg {
  width: 100%;
  height: 100%;
  fill: #ccc;
}

.star-item.active svg {
  fill: #ff0000;
}
</style>

在这个样式文件中,我们定义了组件的样式。其中,.star-container 类定义了容器的样式,.star-item 类定义了星星的样式,.star-item.active 类定义了激活星星的样式。

三、组件使用

现在,我们就可以在 Vue 项目中使用这个组件了,代码如下:

<template>
  <div>
    <star-rating v-model="value" max="5" size="30px" color="#ff6600"></star-rating>
  </div>
</template>

<script>
export default {
  data() {
    return {
      value: 3
    };
  }
};
</script>

在这个示例中,我们创建了一个 star-rating 组件,并将其 v-model 绑定到 value 数据。我们还设置了 maxsizecolor 属性。当用户点击星星时,value 数据就会改变。

四、总结

在这个教程中,我们实现了一个简单的星级组件,可以用于展示和选择。这个组件易于使用和定制,可以满足大多数需求。我希望这个教程对你有所帮助,如果你有任何问题,欢迎随时提出。

五、扩展阅读