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的mixin策略
Nov 19 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
Vue看了就会的8个小技巧
Jan 21 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
vue实现无缝轮播效果(跑马灯)
May 14 Vue.js
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue数据字典取键值项目的字典问题
Apr 12 Vue.js
vue前端工程的搭建
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
开发一个封装iframe的vue组件
如何让vue长列表快速加载
Vue3 Composition API的使用简介
vue+django实现下载文件的示例
You might like
PHP系统命令函数使用分析
2013/07/05 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
PHP对称加密函数实现数据的加密解密
2016/10/27 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
javascript中常用编程知识
2013/04/08 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
javaScript基础详解
2017/01/19 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
Django接收自定义http header过程详解
2019/08/23 Python
python双向链表原理与实现方法详解
2019/12/03 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
客户表扬信范文
2014/01/10 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
异地恋情人节寄语
2015/02/28 职场文书
毕业论文致谢词
2015/05/14 职场文书