目录

介绍

准备

目标

效果

规定

思路

解答参考


介绍

外卖是现代生活中必备的一环。收到外卖后,各大平台软件常常会邀请用户在口味,配送速度多个方面给与评分。在 elementui 组件中,已经有相应的 Rate 组件,但是已有组件只能对单一维度进行评分,在外卖评分这种场景中,样式基本上是固定的,功能基本一样。若每写一个页面都要去复制一份类似代码,就会产生大量重复的代码,既不利于后期的维护,代码也不够简洁。为此需要前端工程师elementui 的原 Rate 组件进行二次封装

准备

开始答题前,需要打开本题项目代码文件夹目录结构如下

├── element-ui-2.6.2
│   ├── element-icons.ttf
│   ├── element-icons.woff
│   ├── element-ui.min.js
│   └── element-ui.style.css
├── index.html
├── js
│   ├── http-vue-loader.js
│   └── vue.min.js
├── my-rate.vue
└── effect.gif

其中:

注意:打开环境发现缺少项目代码,请手动键入下述命令进行下载

cd /home/project
wget https://labfile.oss.aliyuncs.com/courses/18213/03.zip && unzip 03.zip && rm 03.zip

浏览器预览 index.html 页面显示如下所示

目标

请在 my-rate.vue 文件中补充代码,具体要求如下

  1. my-rate.vue 组件能够不同维度进行评分

  2. my-rate.vue 组件对外抛出 change 事件,在三项评分完成后,触发 change 事件,change 事件包含一个参数用于传递改变后的分数值,其类型对象包含以下属性

效果

完成后的效果见 effect.gif (提示可以通过 VS Code 或者浏览器预览 gif 图片)。

实现功能所需的 el-rate 组件 api 如下

参数 说明 类型 默认值
value/vmodel 绑定 number 0
showscore 是否显示当前分数showscoreshowtext 不能同时为真 boolean false
change(event 事件) 分值改变时触发,参数是改变后的分值 (changed: object) => void

规定


思路

这道题目主要是考察Vue以及elementUI的知识点需要学会通过提供的组件API来实现相应的功能。同时也需要使用Vue进行自定义事件的绑定来进行数据的传递。若对组件如何实现通信感兴趣小伙伴可以这篇文章

解答参考

 <ul class="rate-list" &gt;
      <li&gt;
        <!-- TODO 补全 el-rate 属性 --&gt;
        送餐速度:<el-rate v-model="speed" show-score  @change="changeHandler"></el-rate>
      </li>
      <li>
        <!-- TODO 补全 el-rate 属性 -->
        外卖口味:<el-rate v-model="flavour" show-score  @change="changeHandler"></el-rate>
      </li>
      <li>
        <!-- TODO 补全 el-rate 属性 -->
        外卖包装:<el-rate v-model="pack"  show-score  @change="changeHandler"></el-rate>
      </li>
    </ul>

对每一个el-rate标签使用v-model来进行绑定获取对应数值。同时加上showscore属性让其显示当前分数。并未每一个标签绑定change事件,当数值改变时触发

  methods:{
    changeHandler(){
      if(this.speed &amp;&amp; this.flavour &amp;&amp; this.pack){
        const rate = {
           speed: this.speed, // 送餐速度
           flavour: this.flavour, // 外卖口味
           pack: this.pack, // 外卖包装
        }
        this.$emit("change",rate)
      }
    }
  }

当有分值改变时,触发changeHandler函数,并判断三个属性是否都有对应的值,若有,则使用$emit对外抛出 change 事件,并传入对应对象数值

文件整体代码:

<template>
  <div class="block">
    <span class="demonstration">请为外卖评分: </span>
    <ul class="rate-list" >
      <li>
        <!-- TODO 补全 el-rate 属性 -->
        送餐速度:<el-rate v-model="speed" show-score  @change="changeHandler"></el-rate>
      </li>
      <li>
        <!-- TODO 补全 el-rate 属性 -->
        外卖口味:<el-rate v-model="flavour" show-score  @change="changeHandler"></el-rate>
      </li>
      <li>
        <!-- TODO 补全 el-rate 属性 -->
        外卖包装:<el-rate v-model="pack"  show-score  @change="changeHandler"></el-rate>
      </li>
    </ul>
  </div>
</template>
<style>
.block {
  border: 1px solid #c7c5c5;
  padding: 10px;
}
.rate-list {
  list-style: none;
  padding-inline-start: 20px;
  margin-block-start: 10px;
  margin-block-end: 10px;
}
.el-rate {
  display: inline-block;
}
</style>

<script>
module.exports = {
  data() {
    return {
      speed: 0, // 送餐速度
      flavour: 0, // 外卖口味
      pack: 0, // 外卖包装
    };
  },
  /* TODO: 考生需要完成以下内容 */
  methods:{
    changeHandler(){
      if(this.speed &amp;&amp; this.flavour &amp;&amp; this.pack){
        const rate = {
           speed: this.speed, // 送餐速度
           flavour: this.flavour, // 外卖口味
           pack: this.pack, // 外卖包装
        }
        this.$emit("change",rate)
      }
    }
  }
 
  
};
</script>

好啦,本文就到这里了,这道题比较简单就不过多讲解了!

原文地址:https://blog.csdn.net/weixin_51735748/article/details/134796034

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_44086.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注