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项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
解读Vue组件注册方式
May 15 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
vue前端工程的搭建
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
开发一个封装iframe的vue组件
如何让vue长列表快速加载
Vue3 Composition API的使用简介
vue+django实现下载文件的示例
You might like
php for 循环语句使用方法详细说明
2010/05/09 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP实现递归无限级分类
2015/10/22 PHP
PHP错误处理函数
2016/04/03 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
js传值 判断
2006/10/26 Javascript
js常用代码段收集
2011/10/28 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
详解vue组件基础
2018/05/04 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
Python 第一步 hello world
2009/09/25 Python
初学Python实用技巧两则
2014/08/29 Python
Python实现队列的方法
2015/05/26 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
python简单分割文件的方法
2015/07/30 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
python魔法方法-自定义序列详解
2016/07/21 Python
Python set常用操作函数集锦
2017/11/15 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
小区消防演习方案
2014/02/21 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
毕业设计说明书
2014/05/07 职场文书
环卫工作汇报材料
2014/10/28 职场文书
2014年财务科工作总结
2014/11/11 职场文书
教师工作决心书
2015/02/04 职场文书
英文辞职信范文
2015/05/13 职场文书
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server