vue-组件-评分-星星-dataset

简介: 最近正好用到组件这块那就来2个例子吧,一个是评分的 一个是通讯软件分组的整体上其实 vue 还是非常简单易学的,生态也好,学习资料也多,所有关于这个 vue写的文章比较少,就挑一点算是重难点的写写了,不像 react写的那么细,后续还会有 vue 3版本的文章(这好像又是 flag,手动狗头.png)

1.前言


最近正好用到组件这块

那就来2个例子吧,一个是评分的 一个是通讯软件分组的

整体上其实 vue 还是非常简单易学的,生态也好,学习资料也多,所有关于这个 vue写的文章比较少,就挑一点算是重难点的写写了,不像 react写的那么细,

后续还会有 vue 3版本的文章(这好像又是 flag,手动狗头.png)


2. v-model


双向绑定指定大家都比较熟悉了

等价于v-bind:value  +  v-on:input

在深入的 有机会我们可以自己写个双向绑定 ,后续写分析源码了再说

样式的绑定基础

使用了单文件组件

大概效果

QM862JM17BAN$}GI}%1T}BR.png

看到简易的效果后 先思考下怎么实现

其实就是叠加了2次星星

其中 ☆ 默认是10个 铺满

然后★ 根据传值 动态计算宽度百分比


3. 组件模板


动态计算 宽度这块方法比较多, 这里选用了 计算属性computed

动态绑定样式


<template>
  <div class="star-root" :style="rootStyleObj">
    <div class="star-empty star-bar">
  <!-- span 代表的是 每个星星 
                    点击事件 需要把 当前的星星个数传过去
                    比如点了第 3个星星 代表 3分  传3 也就是 n
                 -->
      <span
        v-for="n in total"
        :style="spanStyleObj"
        @click="starClick(n)"
        @mouseover="starClick(n)"
        :key="n"
        >☆</span
      >
    </div>
    <div class="star-full star-bar" :style="fullStarStyle">
      <span
        v-for="n in total"
        :style="spanStyleObj"
        @click="starClick(n)"
        @mouseover="starClick(n)"
        :key="n"
        >★</span>
    </div>
  </div>
</template>



4. vue


这块主要就是计算属性的具体代码

发射input事件

属性传值的验证

重点思考  dataprops区别

props由外面传入 ,大大扩展了组件的灵活性


<script>
export default {
  props: {
    //   这里必须用 value 接收 v-model 的 属性传值
    value: {},
// 星星总数
    total: {
      default: 5,
    },
// 单个星星的尺寸
    size: {
      default: 20,
    },
    editable: {
      default: true,
    },
  },
  name: "star-component",
  data: function () {
    return {
    };
  },
  computed: {
// 单个星星的样式
    spanStyleObj() {
      return {
        width: this.size + "px",
        "font-size": (this.size / 5) * 6 + "px",
        cursor: this.editable ? "pointer" : "default",
      };
    },
    rootStyleObj(){
      return {
        width: this.size * this.total + "px",
        height: this.size + "px",
      };
    },
 // 黑星容器的宽度
    fullStarStyle() {
      return { width: (this.value / this.total) * 100 + "%" 
// 写法比较多
 // width:分数*单个星星的宽度 +"px"
                // width:this.value*this.size +"px"};
    },
  },
  methods: {
    starClick(n) {
      if (this.editable) {
            // v-model 绑定是  input事件
        this.$emit("input", n);
      }
    },
  },
};
</script>



5. 样式采用 less


主要是采用less

flex

注意 star-bar  position: absolute; 就是为了2个星星叠加到一起


<style lang="less" scoped>
.star-root {
  display: inline-block;
  position: relative;
  .star-bar {
    position: absolute;
    left: 0;
    top: 0;
    display: flex;
    span {
      display: inline-block;
      flex-shrink: 0;
      text-align: center;
    }
  }
  .star-full {
    overflow: hidden;
  }
}
</style>


6. 使用组件


  1. 引入
  2. 注册


<h1>评分组件</h1>
      <input type="text" v-model="starScore">
      <Component-Star v-model="starScore" :total="10" :size="40"
        :editable="true"
      ></Component-Star>

更多组件 ,可以自己探索哦

可以使用dataset属性  组件内 传值分数哦 ,点击的时候 获取 .


7. 传值 dataset


$event不要忘了


@click="starClick(n,$event)"
 @mouseover="starClick(n,$event)"
:data-id="n"

接收


starClick(n,event){
            console.log("------",event.target.dataset)
}




相关文章
|
9天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
65 1
|
2月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
154 64
|
20天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
42 8
|
2月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
50 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
46 1

热门文章

最新文章