全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Vue2.0 组件传值通讯的示例代码

在Vue项目中,我们经常把某个功能模块封装起来,形成组件,下次调用时非常方便,同时也是在一些循环中进行dom操作的一种较好方式。

本次我想以一个评价组件来说一下组件的事件和参数是怎样传递的,如何完成的组件通讯。

示例如下:


这里先说一下组件设计思路:

明确整个功能场景,找出存在的事件操作,此例是一个简单的评价功能,即点击某一个星星时左边以及当前为选中的黄色星,右边为未选中的白色星。

确定可复用的组件,即具有重复操作的模块,这里明显的每一个星星为一个可复用组件, 其实还有个星星变成白色和黄色也是一个小组件,这种在具体写的时候觉得可以再分即可。

至此一个划分了三个组件:JudgeOf、JudgeStar、StarImg

这里需要明确的是,在大多数的组件通讯中,父组件往子组件传递的都是数据,子组件往父组件传递的才是事件,
我们姑且称父到子走的是一个数据流,子到父走的是一个事件流,了解这一点基本可以很好的了解组件通讯的情况。

JudgeOf组件:

基本的外框,循环starList构成三个评分选项。向子组件传递选项名字,和当前选项的索引

<template>
 <div>
 <div class="judge-modal" @click="cancel"></div>
 <div class="judge">
  <br>
  <div class="text-center font16">评价</div>
  <judge-star v-for="item,index in starList" :key="index" @judge="judge" :name="item.name" :index="index" ></judge-star>
  <br>
  <div class="box container text-left">
  <span class="icon-i"></span> 评价内容
  </div>
  <div class="bgfff container font14">
  <textarea placeholder="请输入您的评价,方便我们改进,谢谢!" type="textarea" class="textarea" rows="6" v-model="judgeTxt"></textarea>
  </div>
  <div class="container">
  <br>
  <div class="btn btn_block text-center" @click="submit">提交</div>
  </div>
 </div>
 </div>
</template>

<script>
 import JudgeStar from './judgeStar.vue'
 export default{
 data(){
  return{
  starList:[
   {name:'服务态度',key:'evaluate.serviceStarLevel'},
   {name:'责任感',key:'evaluate.dutyStarLevel'},
   {name:'准时度',key:'evaluate.onTimeStarLevel'},
  ],
  evaluate:[],
  judgeTxt:''
  }
 },
 components:{
  JudgeStar
 },
 computed:{

 },
 methods:{
  cancel(){
  this.$emit('cancel')
  },
  submit(){
  let data = '';
  this.starList.forEach((val,index)=>{
   data =`${val.key}:${this.evaluate[index]}`
   console.log(data)
  });
  },
  judge(data){
   this.evaluate[data[0]]=data[1];
  }
 }
 }
</script>

JudgeStar组件:

在这里注册一个chooseIndex,当点击某一个星星时,StarImg组件emit当前星星的index,JudgeStar组件中接收此参数并赋值给chooseIndex,同时StarImg里面watch这个参数,大于index表明没有被选中,反之则为选中,

<template>
 <div class="flex_cont container">
 <div class="flex_item name">{{name}}</div>
 <div class="flex_item">
  <star-img @choose="choose" v-for="item,index in starArr" :key="index" :chooseIndex="chooseIndex" :index="index"></star-img>
 </div>
 </div>

</template>

<script>
 import StarImg from './starImg.vue'
 export default{
 props:{
  name:String,
  index:''
 },
 data(){
  return{
  chooseIndex:4,
  starArr:Array.from({ length: 5 })
  }
 },
 components:{
  StarImg
 },
 mounted(){
  this.$emit('judge',[this.index,this.chooseIndex+1]);
 },
 methods:{
  choose(data){
  this.chooseIndex = data;
  this.$emit('judge',[this.index,this.chooseIndex+1]);
  }
 }
 }
</script>

StarImg组件:

观察chooseIndex值的变化

<template>
 <i style="margin: 0 3px;" :class="icon" @click="choose"></i>
</template>

<script>
export default{
 props:{
  index:Number, //当前星星的索引
  chooseIndex:Number //选中星星的索引
 },
 data(){
  return{
   icon:'icon-star'
  }
 },
 watch:{
 //大于index表明没有被选中,反之则为选中,
  chooseIndex:function () {
  if(this.chooseIndex>=this.index){
   this.icon = 'icon-star'
  } else {
   this.icon = 'icon-star2'
  }
  },
 },
 methods:{
  choose(){
   /*所选星星最大索引*/
   this.$emit('choose',this.index)
  }
 },
 created(){

 }
}
</script>

总结一下:

  1. 父组件通过v-bind:绑定参数传给子组件,子组件通过props接受这个参数。
  2. 在组件的最底层开始写事件,由最底层组件逐步向上$emit事件流,并携带相应参数,最后在父组件内完成总的数据处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vue2.0组件传值  # vue  # 组件传值  # vue组件通讯  # vue2.0 子组件改变props值  # 并向父组件传值的方法  # vue 子组件向父组件传值方法  # Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)  # 图文介绍Vue父组件向子组件传值  # Vue 组件传值几种常用方法【总结】  # Vue父子模版传值及组件传值的三种方法  # vue单页开发父子组件传值思路详解  # Vue实现的父组件向子组件传值功能示例  # 详解Vue中组件传值的多重实现方式  # Vue组件通信中非父子组件传值知识点总结  # vue组件传值的实现方式小结【三种方式】  # 的是  # 则为  # 复用  # 都是  # 最底层  # 是一个  # 您的  # 我想  # 在这里  # 很好  # 有个  # 才是  # 较好  # 请输入  # 是怎样  # 数据处理  # 分了  # 绑定  # 先说  # 大家多多 


相关文章: 定制建站策划方案_专业建站与网站建设方案一站式指南  头像制作网站在线制作软件,dw网页背景图像怎么设置?  网站制作新手教程,新手建设一个网站需要注意些什么?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  ui设计制作网站有哪些,手机UI设计网址吗?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  建站之星安装步骤有哪些常见问题?  网页设计网站制作软件,microsoft office哪个可以创建网页?  如何基于云服务器快速搭建个人网站?  香港服务器部署网站为何提示未备案?  javascript中对象的定义、使用以及对象和原型链操作小结  佛山网站制作系统,佛山企业变更地址网上办理步骤?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  制作营销网站公司,淘特是干什么用的?  历史网站制作软件,华为如何找回被删除的网站?  如何批量查询域名的建站时间记录?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何在云主机上快速搭建多站点网站?  西安专业网站制作公司有哪些,陕西省建行官方网站?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  制作网站的软件免费下载,免费制作app哪个平台好?  文字头像制作网站推荐软件,醒图能自动配文字吗?  ,网站推广常用方法?  如何基于云服务器快速搭建网站及云盘系统?  网站设计制作企业有哪些,抖音官网主页怎么设置?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  高端企业智能建站程序:SEO优化与响应式模板定制开发  外贸公司网站制作哪家好,maersk船公司官网?  建站之星后台管理:高效配置与模板优化提升用户体验  代刷网站制作软件,别人代刷火车票靠谱吗?  如何在IIS中配置站点IP、端口及主机头?  如何在万网ECS上快速搭建专属网站?  如何在阿里云通过域名搭建网站?  音响网站制作视频教程,隆霸音响官方网站?  网站制作说明怎么写,简述网页设计的流程并说明原因?  如何在阿里云服务器自主搭建网站?  如何在阿里云购买域名并搭建网站?  如何在阿里云虚拟服务器快速搭建网站?  如何通过云梦建站系统实现SEO快速优化?  如何选择适合PHP云建站的开源框架?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  高端网站建设与定制开发一站式解决方案 中企动力  c# 在高并发下使用反射发射(Reflection.Emit)的性能  html制作网站的步骤有哪些,iapp如何添加网页?  贸易公司网站制作流程,出口贸易网站设计怎么做?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  如何在云主机快速搭建网站站点?  5种Android数据存储方式汇总 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。