前言

上篇介绍了我对vue组件化的理解和父组件对子组件传值的方式,这篇介绍下常见的子传父和兄弟组件间的传值方式

目录

  • 子组件向父组件传值
  • 任意组件间的传值方式

正文

  • 子组件向父组件传值

  关键知识点:$emit

<div id="app">
<child-div @a='handleTotal'></child-div>
{{total}}
</div>
<script>
//定义子组件
Vue.component('child-div',{
data(){
return{
counter:0,
}
},
template:'<span @click="handleCounter">点我加一{{counter}}</span>',
methods:{
//点击时候子组件加1,父组件加2
handleCounter(){
this.counter ++
console.log('###########');
this.$emit('a',2)
}
}
})
new Vue({
el:'#app',
data:{
total:0,
},
methods:{
handleTotal(e){
console.log('@@@@@@@@@@@');
console.log(e);
this.total+=e
}
}
})
</script>

分析:定义子组件,并且定义子组件的点击事件,子组件通过点击事件触发$emit方法,向父组件弹出a方法,父组件通过监听这个a方法定义handleTotal方法,从而父组件接收到子组件传来的值,这样实现了子组件加一父组件加二效果。

这里遇到的一个坑:我用到的vue.js版本为https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.min.js,在$emit()中注册的给父组件弹出的方法名必须全部用小写字母,只要方法名中存在大写字母就无法实现该效果,但是也不会报错。

  • 任意组件的传值方式

  关键知识点:事件总线EventBus

  任意两个组件之间进行通讯,需要借助事件总线(一个空的vue实例)来触发事件和监听事件,从而实现组件之间的通信。包括父子,兄弟,以及跨级组件都可以使用。

 <div id="app">
<data-a></data-a>
<data-b></data-b>
<data-c></data-c>
</div>
<template id="a"><div>
<button @click='atoC'>A将数据传递给C</button>
我的名字是:{{name}}</div>
</template>
<template id="b"><div>
<button @click='btoC'>B将数据传递给C</button>
我的年龄是:{{age}}</div>
</template>
<template id="c"><div>
<span>我接受到的参数是</span>
{{name}}========={{age}}</div>
</template>
<script> var Event = new Vue();
var a = Vue.component(
'data-a', {
template: '#a',
data() {
return {
name: 'Tom'
}
},
methods: {
atoC() {
// console.log('aaaaaaaaaaaaaaaaaaaa');
Event.$emit('data-a', this.name)
// console.log('atoc success');
}
}
}
)
var b = Vue.component(
'data-b', {
template: '#b',
data() {
return {
age: 20
}
},
methods: {
btoC() {
Event.$emit('data-b', this.age)
}
}
}
)
var c = Vue.component(
'data-c', {
template: '#c',
data() {
return {
name: 'name',
age: 'age'
}
},
mounted() {
// console.log('@@@@@@@@@@@@@@');
Event.$on(
'data-a', name => {
this.name = name;//箭头函数不产生新的this,这里如果不用箭头函数,this指代Event
}
)
Event.$on(
'data-b', age => {
this.age = age;
}
)
}
}
)
new Vue({
el:'#app',
components:{
'data-a':a,
'data-b':b,
'data-c':c
}
})

分析:定义abc三个组件,注册一个全局的事件总线var Event = new Vue();然后a向c传值的时候通过Event调用$emit(事件名,数据)发送数据,c组件通过Event.$on(事件名,data=>{})接收数据。

就相当于注册一个事件总线存起来,等触发事件时再调用。定义一个类去处理事件,并挂载到vue实例的this上即可注册和触发事件,也可以扩展一些事件管理。

Vue-组件传值:子传父和兄弟组件间常见的传值方式的更多相关文章

  1. Vue ---- 组价 组件化 子传父 父传子

    目录 补充js的for循环: 组件 1.组件的分类: 2.组件的特点 3.创建局部组件 4.全局组件 二.组件化 一.组件传参父传子 二.组件传参:子传父 补充js的for循环: // for in遍 ...

  2. React组件介绍与使用(父传子、子传父、兄弟传)

    1.创建组件的方法     1.1.函数式无状态组件 1.1.1.语法 1 function myComponent(props) { 2 return 3 <div>Hello {pro ...

  3. Vue学习笔记-组件通信-子传父(自定义事件)

    props用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件中.我们应该如何处理呢?这个时候,我们需要使用自定义事件来完成.什么时候需要自定义事件呢?当子组件需要向父组件传递 ...

  4. 总结vue中父向子,子向父以及兄弟之间通信的几种方式

    子向父方式1:通过props,如例子中子组件test1.vue向父组件App.vue传值 App.vue代码 <template> <div id="app"&g ...

  5. vue传值 ---- >> 子传父,$emit()

    划重点: $emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数.   子组件:   1 <template& ...

  6. 深度剖析Vue中父给子、子给父、兄弟之间传值!

    本片文章将为您详细讲解在Vue中,父给子传值.子给父传值以及兄弟之间传值方式! 父传子:父组件 // template里面 <aa :info="name"/> // ...

  7. Blazor和Vue对比学习(基础1.4):事件和子传父

    Blazor和Vue的组件事件,都使用事件订阅者模式.相对于上一章的组件属性,需要多绕一个弯,无论Blazor还是Vue,都是入门的第一个难点.要突破这个难点,一是要熟悉事件订阅模式<其实不难& ...

  8. vue的组件通讯 父传子 -- 子传父-- 兄弟组件的传值 vue的组件传值

    首先文字简单撸一下 父子传子   -------首先在父组件上绑定一个属性,在子组件里用props接收,可以是数组或者是对象 子传父   ------在父组件升上自定义一个方法,在子组件里通过this ...

  9. vue 组件之间相互传值 父传子 子传父

    1.父传子 把要传入的值放到父标签里  子组件使用props接收 父写法 子写法 2.子传父 子组件: childrenOnclick() { // 发布自定义事件 this.$emit(" ...

随机推荐

  1. 使用electron+vue开发一个跨平台todolist(便签)桌面应用

    # 1 最近一直在使用electron开发桌面应用,对于一个web开发者来说,html+javascript+css的开发体验让我非常舒服.之前我一直简单的以为electron只是张网页加个壳,和那些 ...

  2. 12.java设计模式之代理模式

    基本介绍: 代理模式(Proxy)为一个对象提供一个替身,以控制对这个对象的访问.即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能,想在 ...

  3. 深度解读最新版 Scrum 指南

    本文作者:CODING - 敏杰小王子 11 月 18 日晚,Scrum 框架的创始人 Jeff Sutherland 和 Ken Schwaber 联手发布了最新版 Scrum 指南.作为 Scru ...

  4. 2020年最新ZooKeeper面试题(附答案)

    2020年最新ZooKeeper面试题 1. ZooKeeper 是什么? ZooKeeper 是一个开源的分布式协调服务.它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zooke ...

  5. mybatis 多数据源动态切换

    笔者主要从事c#开发,近期因为项目需要,搭建了一套spring-cloud微服务框架,集成了eureka服务注册中心. gateway网关过滤.admin服务监控.auth授权体系验证,集成了redi ...

  6. ctfshow之Web入门刷题记(从89开始,持续更新)

    0x01Web89-99PHP特性payload Web89 include("flag.php"); highlight_file(__FILE__); if(isset($_G ...

  7. 分享用MathType编辑字母与数学公式的技巧

    利用几何画板在Word文档中画好几何图形后,接着需要编辑字母与数学公式,这时仅依靠Word自带的公式编辑器,会发现有很多公式不能编辑,所以应该采用专业的公式编辑器MathType,下面就一起来学习用M ...

  8. 有什么好用的Mac数据恢复软件

    对于第一次上手苹果电脑的人来说,使用起来难免有点小难受,因为对苹果电脑操作系统不熟练,发生误删数据的事情也是屡见不鲜. 那么对于这种情况我们该怎么办呢?不用担心,今天小编就为大家推荐一款好用的苹果数据 ...

  9. jenkins 中邮件发送

    1.安装插件 jenkins中安装邮件插件,选择Email Extension 2.开启smtp服务,每个客户端的设置不一样,下图是qq邮箱,仅供参考 3.设置邮件服务 3.1系统设置 3.2 在任务 ...

  10. 基于Docker搭建pypi私有仓库

    一.搭建 1.准备htpasswd.txt文件 该文件内容包含上传包至仓库时验证的用户名和密码 pip install htpasswd htpasswd -sc htpasswd.txt <u ...