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 18 Vue.js
vue-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
Vue实现图书管理小案例
Dec 03 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
Vue实现点击当前行变色
Dec 14 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
Vue页面渲染中key的应用实例教程
Jan 12 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
Vue多选列表组件深入详解
Mar 02 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
vue实现滑动解锁功能
Mar 03 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
vue前端工程的搭建
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
开发一个封装iframe的vue组件
如何让vue长列表快速加载
Vue3 Composition API的使用简介
vue+django实现下载文件的示例
You might like
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
微信支付开发告警通知实例
2016/07/12 PHP
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
JS解密入门 最终变量劫持
2008/06/25 Javascript
javascript 全角转换实现代码
2009/07/17 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
浅谈JS函数节流防抖
2017/10/18 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
详解python3中tkinter知识点
2018/06/21 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
泰国网上购物:Shopee泰国
2018/09/14 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
保护环境建议书100字
2014/05/13 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers
Golang获取List列表元素的四种方式
2022/04/20 Golang