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 相关文章推荐
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
Vue3 Composition API的使用简介
Mar 29 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
vue实现列表拖拽排序的示例代码
Apr 08 Vue.js
vue前端工程的搭建
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
开发一个封装iframe的vue组件
如何让vue长列表快速加载
Vue3 Composition API的使用简介
vue+django实现下载文件的示例
You might like
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
Python break语句详解
2014/03/11 Python
利用Python破解验证码实例详解
2016/12/08 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
Django--权限Permissions的例子
2019/08/28 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
《会走路的树》教后反思
2014/04/19 职场文书
酒店开业主持词
2015/07/02 职场文书
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
Apache自带的ab压力测试工具的实现
2022/07/23 Servers