Vue2.0 组件传值通讯的示例代码
发布时间 - 2026-01-11 02:35:50 点击率:次在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>
总结一下:
- 父组件通过v-bind:绑定参数传给子组件,子组件通过props接受这个参数。
- 在组件的最底层开始写事件,由最底层组件逐步向上$emit事件流,并携带相应参数,最后在父组件内完成总的数据处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vue2.0组件传值
# vue
# 组件传值
# vue组件通讯
# vue2.0 子组件改变props值
# 并向父组件传值的方法
# vue 子组件向父组件传值方法
# Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
# 图文介绍Vue父组件向子组件传值
# Vue 组件传值几种常用方法【总结】
# Vue父子模版传值及组件传值的三种方法
# vue单页开发父子组件传值思路详解
# Vue实现的父组件向子组件传值功能示例
# 详解Vue中组件传值的多重实现方式
# Vue组件通信中非父子组件传值知识点总结
# vue组件传值的实现方式小结【三种方式】
# 的是
# 则为
# 复用
# 都是
# 最底层
# 是一个
# 您的
# 我想
# 在这里
# 很好
# 有个
# 才是
# 较好
# 请输入
# 是怎样
# 数据处理
# 分了
# 绑定
# 先说
# 大家多多
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
EditPlus中的正则表达式实战(5)
网站建设保证美观性,需要考虑的几点问题!
Python文件操作最佳实践_稳定性说明【指导】
如何在局域网内绑定自建网站域名?
jQuery validate插件功能与用法详解
如何快速生成高效建站系统源代码?
如何快速搭建安全的FTP站点?
iOS发送验证码倒计时应用
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
网站制作价目表怎么做,珍爱网婚介费用多少?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
,网页ppt怎么弄成自己的ppt?
JavaScript如何实现音频处理_Web Audio API如何工作?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
如何快速搭建高效可靠的建站解决方案?
手机网站制作与建设方案,手机网站如何建设?
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Laravel如何实现本地化和多语言支持?(i18n教程)
Laravel怎么清理缓存_Laravel optimize clear命令详解
Laravel如何配置Horizon来管理队列?(安装和使用)
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
linux写shell需要注意的问题(必看)
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
如何在橙子建站中快速调整背景颜色?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
高端智能建站公司优选:品牌定制与SEO优化一站式服务
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何用IIS7快速搭建并优化网站站点?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
详解MySQL数据库的安装与密码配置
iOS UIView常见属性方法小结
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
JavaScript实现Fly Bird小游戏
高端企业智能建站程序:SEO优化与响应式模板定制开发
浅析上传头像示例及其注意事项
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
WEB开发之注册页面验证码倒计时代码的实现
黑客入侵网站服务器的常见手法有哪些?
Laravel怎么实现验证码(Captcha)功能
Laravel PHP版本要求一览_Laravel各版本环境要求对照
上一篇:docker怎么更新镜像
下一篇:开发一个app到底需要多少钱?
上一篇:docker怎么更新镜像
下一篇:开发一个app到底需要多少钱?

