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的mixin策略
Nov 19 Vue.js
深入了解Vue3模板编译原理
Nov 19 Vue.js
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
vuex的数据渲染与修改浅析
Nov 26 Vue.js
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 Vue.js
深入了解Vue动态组件和异步组件
Jan 26 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
vue3不同环境下实现配置代理
May 25 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
vue前端工程的搭建
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
开发一个封装iframe的vue组件
如何让vue长列表快速加载
Vue3 Composition API的使用简介
vue+django实现下载文件的示例
You might like
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
ext读取两种结构的xml的代码
2008/11/05 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
在微信小程序中保存网络图片
2019/02/12 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
Python对List中的元素排序的方法
2018/04/01 Python
Python面向对象类的继承实例详解
2018/06/27 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
几个常见的消息中间件(MOM)
2014/01/08 面试题
致标枪运动员加油稿
2014/02/15 职场文书
社区交通安全实施方案
2014/03/22 职场文书
公务员培的训心得体会
2014/09/01 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL