星级评价在店铺中多次使用,因此作为组件进行编写,及封装成插件的方法
需求分析
星级评价的标准是该店铺的得分,样式以星星的尺寸来划分总共有三种,分别是48,36和24
调用插件时传入两个参数,第一个星星的size,数据类型为number,第二个店铺的评分score,数据类型为number
1 组件形式 star.vue(插件形式就是多个调用的js)
1 | <template> |
css代码
1 | <style> |
在引用页面引用当前的组件方式
1 | <body> |
下面我们来实现vue.use(Star_)插件的形式调用. star.vue不变 请看最上面的代码
在star.vue同级创建 index.js(名字无所谓只要路径没问题)
1 | import StarComponent from './star.vue' |
在main.js入口文件下引用该组件
1 | import Star from './components/star' //自定义星星等级组件 |
这样就可以在各个页面用的到的地方引用了
- 参数详解 :class v-for的一些基础语法什么的就不多说了 不懂得可以看看官网
- :class =’starType’ 返回的是一个字符串,该字符串由’star-‘ + this.size拼接而成,this.size是调用组件时传入的num 拼接后,会出现三个类名,分别是star-48,star-36,star-24,这三个类名决定了星星的大小
- v-for=”itemClass in itemClasses” :class=”itemClass” 是循环数组然后拿出span的样式决定星星的状态
- 使用props进行数据传递 接受父组件传过来的参数 size 和 score 和定义参数的类型number
- const LENGTH = 5; 星星长度
- const CLS_ON = ‘on’; 全星的class name
- const CLS_HALF = ‘half’; 半星的class name
- const CLS_OFF = ‘off’; 空白星星的class name
- let result = []; 定义了一个数组,该数组用于存放星星的类名
- let score = Math.floor(this.score * 2) / 2 ,将分数乘以二并向下取整之后除以二,得到x.0或者是x.5的数字
- let hasDecimal = score % 1 !== 0;hasDecimal的值是true或者false对score取余,有余数时hasDecimal为true,无余数时返回false
- let integer = Math.floor(score);//对score再次向下取整
- for循环,根据integer的数值确定向result数组中push类名CLS_ON的个数,由此可以得到全星个数
- if语句hasDecimal为true则有半星,false则无半星
- while语句全星循环的半星判断执行完之后对result数组的长度进行判断,小于总长度则向数组中push空白星