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 相关文章推荐
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
Vue ​v-model相关知识总结
Jan 28 Vue.js
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
Mar 01 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
vue2的 router在使用过程中遇到的一些问题
Apr 13 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
vue如何清除浏览器历史栈
May 25 Vue.js
vue前端工程的搭建
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
开发一个封装iframe的vue组件
如何让vue长列表快速加载
Vue3 Composition API的使用简介
vue+django实现下载文件的示例
You might like
php中用数组的方法设置cookies
2011/04/21 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
Python中的日期时间处理详解
2016/11/17 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
Python random模块用法解析及简单示例
2017/12/18 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
集团公司总经理岗位职责
2013/12/20 职场文书
项目总经理岗位职责
2014/02/14 职场文书
促销活动计划书
2014/05/02 职场文书
爱护公共设施标语
2014/06/24 职场文书
助学贷款贫困证明
2014/09/23 职场文书
财务会计岗位职责
2015/02/03 职场文书
董事长秘书工作总结
2015/08/14 职场文书
学校教师培训工作总结
2015/10/14 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL