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 30 Vue.js
Vue Elenent实现表格相同数据列合并
Nov 30 Vue.js
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
vue项目支付功能代码详解
Feb 18 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 Vue.js
vue前端工程的搭建
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
开发一个封装iframe的vue组件
如何让vue长列表快速加载
Vue3 Composition API的使用简介
vue+django实现下载文件的示例
You might like
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
php语法检查的方法总结
2019/01/21 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
python字典get()方法用法分析
2015/04/17 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
python 常见的排序算法实现汇总
2020/08/21 Python
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
高中教师个人总结
2015/02/10 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
Nginx工作原理和优化总结。
2021/04/02 Servers