vue3中的组件间通信


Posted in Vue.js onMarch 31, 2021

父给子传值 props

我们通过在父组件引用子组件的时候,可以通过自定义属性进行值的传递,在子组件通过 props 进行接受。

//parent.vue
<template>
  <div class="search">
    <span>这是父组件的值:{{test}}</span>
    <Child :toChild="test"/> // 通过自定义属性 toChild
  </div>
</template>
<script>
import Child from './child.vue'
export default {
  name: "parent",
  setup(){
    const test = ref("传给子组件")
    return {
      test
    }
  },
  components:{
    Child
  },
}
</script>
//child.vue
<template>
  <div class="child">
    子组件接收的值:{{toChild}}
  </div>
</template>
<script>
export default {
  name:"child",
  props:["toChild"], //通过props接收自定义属性 toChild
}
</script>

$attrs给子组件传值

我们的 $attrs 只会包括未被 props 继承的属性。

//parent.vue
<template>
  <div class="search">
    <span>这是父组件的值:{{test}}</span>
    <Child :toChild="test" :toTest="`测试数据`"/>
  </div>
</template>
<script>
import {ref} from 'vue'
import Child from './child.vue'
export default {
  name: "parent",
  setup(){
    const test = ref("传给子组件")
    return {
      test
    }
  },
  components:{
    Child
  },  
}
</script>
//child.vue
<script>
export default {
  name:"child",
  props:["toChild"],
  created:function(){
    console.log(this.$attrs,"test")
  },
}
</script>

我们控制台的打印为:
vue3中的组件间通信

$parent

通过 $parent 获取父级的时候,可以获取父级的全部属性。

//parent.vue
<template>
  <div class="search">
    <span>这是父组件的值:{{test}}</span>
    <Child :toChild="test" :toTest="`测试数据`"/>
  </div>
</template>
<script>
import {ref} from 'vue'
import Child from './child.vue'
export default {
  name: "parent",
  setup(){
    const test = ref("传给子组件")
    const bar = ref("这你都可以拿得到")
    return {
      test,
      bar
    }
  },
  components:{
    Child
  },  
}
</script>
//child.vue
<template>
  <div class="child">
    子组件接收的值:{{toChild}}
  </div>
</template>
<script>
export default {
  name:"child",
  props:["toChild"],
  created:function(){
    console.log("bar:",this.$parent.bar)
    console.log("test:",this.$parent.test)
  },
}
</script>

我们控制台的打印为:
vue3中的组件间通信
可以看到我们并没有对 test 进行抛出,但是我们还是可以获取到,同时需要注意的是,我们获取的方式是使用的父级的变量名。

provide / inject

//parent.vue
<script>
import {ref,provide} from 'vue'
export default {
  name: "parent",
  setup(){
    const test = ref("传给子组件")
    provide("testpro",test)
  },
  components:{
    Child
  },  
}
</script>
//child.vue
<script>
import {inject} from 'vue'
export default {
  name:"child",
  created:function(){
    console.log("test:",inject("testpro"));
  },
}
</script>

在我们的控制台打印如下:
vue3中的组件间通信
通过 provide / inject 获取只需要通过对应的API 提供,注入就可以获取,不需要抛出。

子组件向父组件传递 emit

//parent.vue
<template>
  <div class="search">
    <span>这是父组件的值</span>
    <Child @testEmit="updateCity"/>
  </div>
</template>
<script>
import Child from './child.vue'
export default {
  name: "parent"
  methods:{
    updateCity(data){
        console.log("子组件传递的:",data);
    }
  },
  components:{
    Child
  },  
}
</script>
//child.vue
<template>
  <div class="child" @click="toChild">
  </div>
</template>
<script>
export default {
  name:"child",
  methods:{
      toChild(){
        this.$emit("testEmit","传给父组件")
      }
  },
}
</script>

vue3中的组件间通信

但是这种方法在 Vue3.x 中不推荐使用。

Vue.js 相关文章推荐
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 Vue.js
Vue仿百度搜索功能
Dec 28 Vue.js
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
详解vue中v-for的key唯一性
May 15 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
vue判断按钮是否可以点击
Apr 09 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
vue实现在data里引入相对路径
Jun 05 Vue.js
el-table-column 内容不自动换行的解决方法
Aug 14 Vue.js
vue前端工程的搭建
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
开发一个封装iframe的vue组件
如何让vue长列表快速加载
Vue3 Composition API的使用简介
vue+django实现下载文件的示例
You might like
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
php命令行写shell实例详解
2018/07/19 PHP
JavaScript URL参数读取改进版
2009/01/16 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
js同源策略详解
2015/05/21 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python实现的最近最少使用算法
2015/07/10 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
pygame实现打字游戏
2021/02/19 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
加拿大探亲邀请信
2014/01/28 职场文书
运动会入场词200字
2014/02/15 职场文书
电工技术比武方案
2014/05/11 职场文书
六查六看自查报告
2014/10/14 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
用Python写一个简易版弹球游戏
2021/04/13 Python
js实现自动锁屏功能
2021/06/02 Javascript
MongoDB使用场景总结
2022/02/24 MongoDB
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技