当前位置:首页 > 技术分析 > 正文内容

vue3中父子组件之间传值的详解

ruisui884个月前 (01-07)技术分析23

首先我们回顾一下vue2中父子组件是怎么传值的,然后对比vue3进行详解。

一、vue2中父子组件传值

<!-- 父组件 -->
<template>
    <div>
  		// name:父组件把值传给子组件test-child
  		// childFn:子组件传递值给父组件的自定义方法
      <test-child :name="name" @childFn="parentFn"></test-child>
      子组件传来的值 : {{message}}
    </div>
</template>

<script>
export default {
    data() {
        return {
          message: '',
          name: '张三'
        }
    },
    methods: {
      // 接收子组件的传值
       parentFn(payload) {
         this.message = payload;
       }
    }
}
</script>
<!-- 子组件 -->
<template> 
    <div>
  			{{name}}
        <input type="text" v-model="message" />
        <button @click="click">发送消息给父组件</button>
    </div>
</template>
<script>
export default {
		props:{
      name:{
        type:String,
        default:''
      }
    }
    data() {
        return {
          message: '我是来自子组件的消息'
        }
    },
    methods: {
      click() {
            // 1、childFn 组件方法名,请对照父组件
            // 2、message是传递给父组件的数据
            this.$emit('childFn', this.message);
        }
    }    
}
</script>

上面的代码可以看到我们vue2中父子组件之间传值是通过prop传值给子组件,子组件通过$emit把值传递给父组件进行交互。那么我们下面看看vue3中是如何进行组件之间传值的。

二、provide & inject

vue3提供了provide() 和 inject() 两个方法,可以实现组件之间的数据传递。父级组件中使用 provide() 函数向子组件传递数据;子级组件中使用 inject() 获取父组件传递过来的数据。代码如下:

<!-- 父组件 -->
<template>
  <div id="app">
    <test-child></test-child>
  </div>
</template>
<script>
import testChild from './components/testChild'
// 1. 按需导入 provide
import { provide } from '@vue/composition-api'
export default {
  name: 'app',
  setup() {
    //  App 根组件作为父级组件,通过 provide 函数向子级组件共享数据(不限层级)
    //  provide('要共享的数据名称', 被共享的数据)
    provide('color', 'red')
  },
  components: {
    testChild
  }
}
</script>
<template>
  <div>
  <!--  通过属性绑定,为标签设置字体颜色 -->
  <h3 :style="{color: themeColor}">Level One</h3>
</div>
</template>
<script>
import { inject } from '@vue/composition-api'
export default {
  setup() {
    // 调用 inject 函数时,通过指定的数据名称,获取到父级共享的数据
    const themeColor = inject('color')
    // 把接收到的共享数据 return 给 Template 使用,进行数据渲染
    return {
      themeColor
    }
  }
}
</script>

通过上面的代码我们可以发现,vue3中数据传值更加简单了,不用再引入子组件标签上写属性,直接通过provide()设置指定的名称,可以在子组件中通过inject()拿到,是不是感觉很简单呢。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/73.html

分享给朋友:

“vue3中父子组件之间传值的详解” 的相关文章

医疗养老收费管理系统

医疗养老收费管理系统headerfooter《医疗养老收费管理系统》是最新开发的适用于养老保险收费行业的管理系统。主要功能:1.基本信息:单位设置、缴费基数、缴费比例和队别设置;2.医疗保险管理:医疗保险人员信息、医疗保险收费、医疗保险信息查询、医疗保险收费查询、医疗保险收费情况;3.养老保险信息:...

Gitlab+Jenkins通过钩子实现自动部署web项目,图文详细教程

扩展参考:Jenkins+Gitlab通过脚本自动部署回滚web项目至集群 一:基础环境介绍及准备1):Gitlab服务器:ubuntu 192.168.152.131 ---参考搭建:Linux安装gitlab,docker安装gitlab教程2):Jenkins服务器:ubunu 192.168...

基于gitlab的PR操作教程

基于gitlab的PR操作教程注:该教程主要基于git命令行操作,其他图形化工具也可完成以下所有操作步骤,顺手即可。推荐工具:Source Tree ,TortoiseGit参考:gitflow一 . 基于分支的PR操作1. 本地切换到master分支1. 拉取最新代码2. 基于master创建ho...

内存问题探微

这篇文章是我在公司 TechDay 上分享的内容的文字实录版,本来不想写这么一篇冗长的文章,因为有不少的同学问是否能写一篇相关的文字版,本来没有的也就有了。说起来这是我第二次在 TechDay 上做的分享,四年前第一届 TechDay 不知天高地厚,上去讲了一个《MySQL 最佳实践》,现在想起来那...

《暗黑破坏神 2:重制版》PC 版 2.3 版本发布,支持英伟达 DLSS

IT之家 12 月 3 日消息,暴雪为《暗黑破坏神 2:重制版》PC 版发布了更新 2.3 版本,添加了“离线难度缩放”滑块(玩家可以在单人游戏时增加挑战和奖励的级别)、多项辅助功能和用户界面改进,以及英伟达 DLSS 支持。玩法改进:玩家现在可以在离线游戏的选项菜单中使用“游戏难度等级”,它提供与...

最快清除数组空值?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!大家好,我是大澈!本文约 600+ 字,整篇阅读约需 1 分钟。今天分享一段优质 JS 代码片段,用最简洁的代码清除了数组中的空值。老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!const arr...