Vue精简代码实现评分组件

news/2024/7/10 2:23:59 标签: Vue, 前端移动端

写在前面

评分组件,星星可以点击也可以禁止点击,根据分值,可以展示全星、灰星、半星,包含小数点就算半星!

效果图

在这里插入图片描述

组件代码

<template>
  <div class="star">
    // 用于父子组件双向绑定
    <input type="hidden" v-model="value">
    // 不可点击的星星
    <div v-if="readonly">
      // 满星
      <img v-for="i in parseInt(value)" :key="i" :src="full">
      // 半星
      <img v-if="value.toString().indexOf('.') > 0" :src="half">
      // 灰星
      <img v-for="i in parseInt(5 - value)" :key="i * 6" :src="empty">
    </div>
    // 可点击的星星
    <div v-else>
      // 满星
      <img v-for="i in num" :key="i" :src="full" @click="num = i">
      // 灰星
      <img v-for="i in parseInt(5 - num)" :key="i * 5" :src="empty" @click="num += i">
    </div>
  </div>
</template>

<script>
export default {
  props: {
    // 分值
    value: {
      type: Number,
      default: 0
    },
    // 只读,表示可以点击还是不可点击
    readonly: {
      type: Boolean,
      default: false
    }
  },
  data () {
    return {
      num: 0,
      full: require('./红星.png'),
      empty: require('./灰星.png'),
      half: require('./半星.png')
    }
  },
  watch: {
    num () {
      // 可点击状态下,双向绑定的分值改变
      this.$emit('input', this.num)
    }
  }
}
</script>

<style scoped>
  .star img {
     width: 24px;
     height: 24px;
     margin: 0 2px;
   }
</style>

父组件使用

<template>
	<div>
     <span>评分</span>
     // 可点击
     <star v-model="mess.star"/>
     // 不可点击
     <star v-model="mess.star" readonly/>
   </div>
</template>

<script>
  import star from './star'
  
  export default {
    data () {
      return {
        star: 4.5
      }
    },
    components: {
      star
    }
  }
</script>

每天都要进步!!!
个人联系方式(添加请备注):
QQ:332983810
微信:hu_jiliang


http://www.niftyadmin.cn/n/1410431.html

相关文章

jfreechart在Unix下无法显示

JFreechart部分在本地windowstomcat下运行良好&#xff0c;但是放到服务器上unixtomcat后&#xff0c;图表图片不能正常显示&#xff0c;图片出显示红叉子&#xff0c;图片上的文字都不能显示。在网上搜索了许多相关问题&#xff0c;终于找到问题根源&#xff1a;java在*unix平…

Vue中双向绑定实现的表单选择组件(按钮样式)

写在前面 表单中经常会用到选择框的组件&#xff0c;HTML自带的样式太丑了&#xff0c;第三方的组件也不满足项目的使用需求&#xff0c;而且样式也不好看&#xff0c;于是自己就撸了一个&#xff0c;代码很简单&#xff0c;可以实现单选和多选&#xff0c;且选择后不需要再对…

Vue移动端树形控件实现(递归组件)

写在前面 因项目中需要用到树形控件&#xff0c;第三方的组件也不满足项目的使用需求&#xff0c;就自己造了一个车轮子&#xff0c;用Vue递归组件的方式实现&#xff0c;代码简单易懂&#xff0c;直接复制即可使用。 效果图 子组件代码 <template><ul v-if"d…

Delphi编辑器使用指南

1.使用code explorer,双击可以查找方法的定义和实现。 2.使用CtrlShiftC,Class Completion,可以自动生成类和方法的定义。 3.Code Completion&#xff0c;可以自动提示&#xff0c;Ctrlspacebar. 4.CtrlShifti,可以对代码集缩进。CtrlShiftU&#xff0c;可以退回缩进。 本文转自…

Vue中使用contenteditable属性撸一个可以自动手动换行的输入框

写在前面 有时候页面上需要一个类似于微信中发送消息的输入框&#xff0c;即可以实现&#xff1a;默认只有一行文字高度&#xff0c;用户输入超过自动换行&#xff0c;用户也可以点击Enter键盘换行&#xff0c;当输入的内容清空后&#xff0c;输入框又恢复成一行的高度&#x…

centos7 修改时区

[rootbogon ~]# timedatectl set-timezone Asia/Shanghai #时区 [rootbogon ~]# ntpdate time1.aliyun.com #时间 本文转自 小小三郎1 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/wsxxsl/1929837&#xff0c;如需转载请自行联系原作者

前端项目中常用JS方法封装分享

写在前面 我在写项目时&#xff0c;会把经常用到的方法专门用一个JS文件来管理&#xff0c;下面是我项目中经常用的一些方法 1、日期格式化&#xff08;时间戳转年月日时分秒&#xff09;&#xff1b; 2、千分位格式化&#xff08;10000转10,000&#xff09;&#xff1b; 3、E…

Xendesktop配置高可用DDC

桌面虚拟化产品目前主要的是Citrix的Xendesktop&#xff0c;VMware的View两大产品。今天主要介绍Xendesktop产品&#xff0c;关于View以后有机会了再做介绍。 关于Xendesktop的网上的教程太多了&#xff0c;而且现在Citrix已经将Xendesktop的安装做的越来越简单方便了&#xff…