vue组件通信

  1. 页面传值:$route/${prop}
  2. 组件传值:
    • 父组件传值给子组件:参数传值
    • 子组件传值给父组件:给父组件传过来函数传参数;通过插槽的v-slot,绑定参数

组件通信一般分为以下几种情况:

  • 父子组件通信
  • 兄弟组件通信
  • 跨多层级组件通信
  • 任意组件

父子通信

父组件通过 props 传递数据给子组件,子组件通过 emit 发送事件传递数据给父组件

父子通信方式也就是典型的单向数据流,父组件通过 props 传递数据,子组件不能直接修改 props, 而是必须通过发送事件的方式告知父组件修改数据。

还可以通过访问 $parent 或者 $children 对象来访问组件实例中的方法和数据。

父传值给子组件

props传值

  • 父组件
<template>
<div>
<children :info ="messgae"></children>
</div>
</template>
<script>
import children from './children.vue'
export default {
data(){
return{
messgae:'我是父组件'
}
},
components:{
children
}
}
</script>
<style></style>
  • 子组件
<template>
<div>{{info}}</div>
</template>
<script>
export default {
props:['info']
}
</script>
<style></style>
子组件给向父组件传递事件

$emit

  • 父组件
<template>
<div>
{{ newData }}
<children @event1="change($event)"></children>
</div>
</template>
<script>
import children from './children'
export default {
data() {
return {
newData: '这是父组件的数据'
}
},
methods: {
change(data) {
this.newData = data;
}
},
components: {
children
}
}
</script>
<style></style>
  • 子组件
<template>
<div>
<h1>我是子组件</h1>
<button @click="toParent">向父组件传值</button>
</div>
</template>
<script>
export default {
data() {
return {
data1: '子组件的数据'
}
},
created(){
console.log(222)
},
methods: {
toParent:function() {
this.$emit('event1', this.data1)
}
}
}
</script>
<style scoped></style>

兄弟组件通信

这种情况可以通过查找父组件中的子组件实现,也就是 this.\(parent.\)children,在 $children 中可以通过组件 name 查询到需要的组件实例,然后进行通信。

跨多层次组件通信

对于这种情况可以使用 Vue 2.2 新增的 API provide / inject,虽然文档中不推荐直接使用在业务中,但是如果用得好的话还是很有用的。

假设有父组件 A,然后有一个跨多层级的子组件 B

// 父组件 A
export default {
provide: {data: 1}
}
// 子组件 B
export default {
inject: ['data'],
mounted() {
// 无论跨几层都能获得父组件的 data 属性
console.log(this.data) // => 1
}
}

任意组件

这种方式可以通过 Vuex 或者 Event Bus 解决,另外如果你不怕麻烦的话,可以使用这种方式解决上述所有的通信情况

VUE学习-组件通信的更多相关文章

  1. Vue 兄弟组件通信(不使用Vuex)

    Vue 兄弟组件通信(不使用Vuex) 项目中,我们经常会遇到兄弟组件通信的情况.在大型项目中我们可以通过引入vuex轻松管理各组件之间通信问题,但在一些小型的项目中,我们就没有必要去引入vuex.下 ...

  2. Vue兄弟组件通信

    Vue兄弟组件通信之借助中央事件总线 下载链接:https://www.yinxiangit.com 其实要实现兄弟组件通信,就算是通过父子组件通信的方式也是可以达到的,如 子 ——>父——&g ...

  3. Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)

    Vue父子组件通信(父级向子级传递数据.子级向父级传递数据.Vue父子组件存储到data数据的访问) 一.父级向子级传递数据[Prop]: ● Prop:子组件在自身标签上,使用自定义的属性来接收外界 ...

  4. vue学习指南:第七篇(详细) - Vue的 组件通信

    Vue 的 父传子 子传父 一.父组件向子组件传值: 父传子 把需要的数据 传递给 子组件,以数据绑定(v-bind)的形式,传递到子组件内部,供子组件使用  缩写是(:) 1.创建子组件,在src/ ...

  5. vue 父子组件通信

    算是初学vue,整理一下父子组件通信笔记. 父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息. 一.父组件向子组件下发数据: 1.在子组件中显式地用props选项声明它预期的数据 ...

  6. vue 父子组件通信详解

    这是一篇详细讲解vue父子组件之间通信的文章,初始学习vue的时候,总是搞不清楚几个情况 通过props在父子组件传值时,v-bind:data="data",props接收的到底 ...

  7. vue 父子组件通信props/emit

    props 1.父组件传递数据给子组件 父组件: <parent> <child :childMsg="msg"></child>//这里必须要 ...

  8. vue中组件通信

    组件的通信 1. 父子组件通信 案例:   //父子组件通信思路 // 1 将父组件的数据传给子组件 在子组件上自定义单项数据绑定 // 2 子组件用props 接受自定义的那个:号属性 Vue.co ...

  9. vue父子组件通信高级用法

    vue项目的一大亮点就是组件化.使用组件可以极大地提高项目中代码的复用率,减少代码量.但是使用组件最大的难点就是父子组件之间的通信. 子通信父 父组件 <template> <div ...

  10. vue之组件通信

    vue组件通信一般分为以下几种情况: 1.父子组件通信: 2.兄弟组件通信: 3.跨多层级组件通信: 一.父子通信        父组件通过props传递数据给子组件,子组件通过emit发送事件传递数 ...

随机推荐

  1. Java——File类

    File类 File:代表一个文件或者文件夹 方法 createNewFile() exists() getAbsolutePath() getName() getParent() isDirecto ...

  2. 001.shell-每日练习一文件创建

    001.shell-每日练习一文件创建 0x00.练习要求 在/usr/local/uz654目录下,按照xxxx-xx-xx生成一个文件,如:2023-02-11.log 把磁盘的使用情况写到这个文 ...

  3. Warning: PHP Startup: Unable to load dynamic library

    使用 phpstudy时,一直提示找不到指定的模块,但是在我对应的文件里面是有该模块的 且 php.ini中 对应的语句注释也已打开 我遇见该问题解决方法是:php版本与这个拓展的版本不对应  ,把版 ...

  4. win10 系统修复IE11方法

    我也是手贱卸载了IE11,启用或关闭Windows功能里也没有Internet Explorer 11,今天意外发现了解决办法. 设置--应用--应用和功能--管理可选功能--添加功能--Intern ...

  5. HJ77 火车进站

    描述 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先 ...

  6. 记maven打包加入外部jar后tomcat运行失败问题

    环境:maven 3.8.0 .tomcat 8.5.30 因为项目需要额外的引用外部jar,需要打包到war中. 所以在pom中加入了 <webResources> <resour ...

  7. kali对安卓的渗透(内网穿透)

    前言:随着移动端的增加,安卓占比巨大,人们对手机的安全防范意识薄弱,手机为了人们更加的方便,缺乏防护软件,甚至好多木马不需要做免杀. 现在我来做安卓的渗透,不需要在内网也能进行,实现了内网穿透.(有公 ...

  8. [Notes-DS-1]时间复杂度的几个概念和计算方法

    ..加点字才算原创?

  9. 快速排序(QuiteSort)

    快速排序算法(QuiteSort)是基于分治策略的一个算法.其基本算法是,对于输入的子数组a[p,r],按以下3个步骤进行排序: (1)分解(divide):以 a[p]为基准元素将a[p:r]划分成 ...

  10. 路飞项目 day02 全局日志、全局异常处理、封装Response、数据库准备

    一.路飞项目全局日志配置 ​ 那个代码不用死记硬背,知道一些地方是啥意思即可 1.复制django自带的日志模块的大代码到dev(settings)文件中 LOGGING = { 'version': ...