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+iview分页组件的封装
Nov 17 Vue.js
Vue中inheritAttrs的使用实例详解
Dec 31 Vue.js
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
vue postcss-px2rem 自适应布局
May 15 Vue.js
Vue Element plus使用方法梳理
Dec 24 Vue.js
vue前端工程的搭建
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
开发一个封装iframe的vue组件
如何让vue长列表快速加载
Vue3 Composition API的使用简介
vue+django实现下载文件的示例
You might like
PHP 处理图片的类实现代码
2009/10/23 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
新闻内页-JS分页
2006/06/07 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
php 修改密码实现代码
2017/05/24 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
使用Python操作MySQL的一些基本方法
2015/08/16 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
Python安装OpenCV的示例代码
2020/03/05 Python
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
记账会计岗位职责
2014/06/16 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
2016国培学习心得体会
2016/01/08 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技