Web前端 ---- 【Vue】(组件)父子组件之间的通信一文带你了解

目录

前言

父组件传子组件 ---- props

给要传递数据的子组件绑定要传过去的属性及属性值

在子组件中使用props配置项接收

props配置项

子组件传父组件 ---- 组件的自定义事件

子组件向父组件传递数据

通过代码来绑定自定义事件


前言

本文将介绍在Vue中父子组件如何进行通信

父组件传子组件 ---- props

这里先介绍父组件如何向子组件传递数据

首先创建脚手架Cli

创建父组件App.vue和子组件SonX.vue

注册好子组件并在父组件中使用

子组件

导出子组件

<template>
  <div>
    <h1>我是儿子</h1>
  </div>
</template>

<script>
export default {
    name:'SonX'
}
</script>

<style>

</style>

父组件

导入子组件并注册使用

<template>
  <div id="app">
   <SonX></SonX>
  </div>
</template>

<script>
import SonX from './components/SonX.vue'

export default {
  name: 'App',
  components: {
    SonX
  }
}
</script>

<style>

</style>

给要传递数据的子组件绑定要传过去的属性及属性值

仅在子组件上添加属性

<template>
  <div id="app">
   <SonX name="zs" age="20" gender="男"></SonX>
  </div>
</template>

在子组件中使用props配置项接收

<template>
  <div>
    <h1>我是儿子</h1>
    <h2>{{name}}</h2>
    <h2>{{age}}</h2>
    <h2>{{gender}}</h2>
  </div>
</template>

<script>
export default {
    name:'SonX',
    props:['name','age','gender']
}
</script>

<style>

</style>

效果

成功渲染到页面上

props配置项

注意:不要直接修改props中的数据

简单接收,直接采用数组形式接收:

props:['name','age','gender']

添加类型限制:

props:{

        name:String,

        age:Number,

        gender:String

}

当添加了类型限制后,如果父组件传过去属性值不符合就会报错

如下,父组件传过去的age='20'是字符串,并不是数字,所以就报错了

添加类型限制,并且还可以添加默认值,还可以添加必要性:

props:{

        name:{

                type:String,

                required:true

                        },

        age:{

                type:Number,

                default:20

                        },

        gender:{

                type:String,

                required:true

                        }

}

添加了默认值和必要性,当添加必要性时,如果没有传递就会报错,添加了默认值,如果没有传递该属性,子组件就会使用默认值

子组件传父组件 ---- 组件的自定义事件

在父组件中

先在子组件上自定义一个事件

v-on:事件名='函数' 或 @事件名="函数"

<template>
  <div id="app">
   <SonX name="zs" age="20" gender="男" v-on:event="think"></SonX>
  </div>
</template>

<script>
import SonX from './components/SonX.vue'

export default {
  name: 'App',
  components: {
    SonX
  },
  methods:{
    think(){
      console.log('传递成功');
    }
  }
}
</script>

<style>

</style>

在子组件中

用以下方法进行对自定义事件的执行

this.$emit('自定义的事件名')

<template>
  <div>
    <h1>我是儿子</h1>
    <h2>{{name}}</h2>
    <h2>{{age}}</h2>
    <h2>{{gender}}</h2>
    <button @click="think2">测试</button>
  </div>
</template>

<script>
export default {
    name:'SonX',
    props:['name','age','gender'],
    methods:{
      think2(){
        this.$emit('event')
      }
    }
}
</script>

子组件向父组件传递数据

子组件中

this.$emit('自定义的事件名',传递的参数)

<template>
  <div>
    <h1>我是儿子</h1>
    <button @click="think2">测试</button>
  </div>
</template>

<script>
export default {
    name:'SonX',
    data(){
     return {
      name:'ls',
      age:30,
      gender:'女'
     }
    },
    methods:{
      think2(){
        this.$emit('event',this.name,this.age,this.gender)
      }
    }
}
</script>

父组件中

对子组件中传过来的数据进行接收

<template>
  <div id="app">
   <SonX name="zs" age="20" gender="男" v-on:event="think"></SonX>
  </div>
</template>

<script>
import SonX from './components/SonX.vue'

export default {
  name: 'App',
  components: {
    SonX
  },
  methods:{
    think(name,age,gender){
      console.log(name,age,gender);
    }
  }
}
</script>

成功接收并打印出来

通过代码来绑定自定义事件

先通过ref获取子组件

ref='组件名'

在mounted钩子函数中

this.$refs.ref获取到的组件名.$on('自定义事件名',回调函数)

<template>
  <div id="app">
   <SonX ref="SonX"></SonX>
  </div>
</template>

<script>
import SonX from './components/SonX.vue'

export default {
  name: 'App',
  mounted(){
    this.$refs.SonX.$on('event',this.think)
  },
  components: {
    SonX
  },
  methods:{
    think(name,age,gender){
      console.log(name,age,gender);
    }
  }
}
</script>

在页面上渲染

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/386906.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法学习——LeetCode力扣回溯篇4

算法学习——LeetCode力扣回溯篇4 332. 重新安排行程 332. 重新安排行程 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票…

Spring Boot 笔记 009 创建接口_更新用户基本信息

1.1.1 给User实体类添加校验 package com.geji.pojo;import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import jakarta…

一周学会Django5 Python Web开发-Django5 Hello World编写

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计14条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

SpringCloud之Eureka注册中心和负载均衡

SpringCloud之Eureka注册中心和负载均衡 微服务技术栈认识微服务单体架构分布式架构微服务 微服务拆分及远程调用微服务拆分注意事项 Eureka注册中心提供者与消费者原理分析服务调用出现的问题Eureka的作用 使用流程1、搭建EurekaServer2、注册user-service3、在order-service完…

【Godot4自学手册】第十三节初建创建敌人

从本节起&#xff0c;将要学习创建第一人。 一、创建敌人动画 1.导入素材。 在Sprites文件夹下新建Enemy文件夹&#xff0c;并将需要的敌人素材导入到文件夹。文档结构如下&#xff1a; 2.创建Enemy场景。 新建场景&#xff0c;根节点设置为CharacterBody2D&#xff0c;命…

Docker的常见命令以及命令别名

常见命令 命令说明docker pull拉取镜像docker push推送镜像到DockerRegistrydocker images查看本地镜像docker rmi删除本地镜像docker run创建并允许容器docker stop停止指定容器docker start启动指定容器docker restart重新启动容器docker rm删除指定容器docker ps查看容器do…

PR:熟悉PR工作环境

新建项目 设置自己的页面布局 首选项

vim编辑代码后退出编辑显示vim编辑的内容

在/etc/profile.d/下新建terminal.sh&#xff1a; 在terminal.sh里添加如下代码&#xff1a; #!/bin/bashexport TERMlinux 然后同步文件到内存&#xff1a; source /etc/profile

ACM训练题:互不侵犯

一看数据范围&#xff0c;如果是枚举所有的棋盘情况&#xff0c;2^K&#xff0c;肯定超了&#xff0c;自然是要一行一行递推&#xff0c;而相邻这个情况用位运算会比较方便&#xff0c;所以用状压dp。 具体算法&#xff1a;dp[i][j][k]表示第i行&#xff0c;前i行有j个棋子&…

【网站项目】023实验室耗材管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

去空行小工具Html + Javascript

这是一个平常用到的小工具&#xff0c;为了节省屏幕空间把空行去掉&#xff0c;怕要用的时候找不到故记录在此。 效果图 网页版&#xff0c;放在浏览器里就可以用 <!doctype html> <html><head><meta charset"utf-8"><title>去回车…

九、OpenCV自带colormap

项目功能实现&#xff1a;每隔1500ms轮流自动播放不同风格图像显示&#xff0c;按下Esc键退出 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 colormap.h #pragma once #include<opencv2/opencv.hpp> using namespace cv;class ColorMap { public:vo…

Spring 如何解决循环依赖?Spring三级缓存

什么是循环依赖 说白是一个或多个对象实例之间存在直接或间接的依赖关系&#xff0c;这种依赖关系构成了构成一个环形调用。 自己依赖自己 两个对象间的依赖关系 多个对象间的依赖关系 Spring出现循环依赖的场景 单例的setter注入 Service public class A {Resourceprivate…

flask+python儿童福利院管理系统pycharm毕业设计项目

本系统解决了儿童福利院管理事务中的主要问题&#xff0c;包括首页、个人中心、爱心人士管理、员工管理、后勤人员管理、儿童信息管理、院所风采管理、活动管理、食谱管理、领养流程管理、政策法规管理、楼栋管理、宿舍管理、领养申请管理、义工申请管理、捐赠信息管理、宿舍物…

linux应用 进程间通信之共享内存(POSIX)

1、前言 1.1 定义 POSIX共享内存是一种在UNIX和类UNIX系统上可用的进程间通信机制。它允许多个进程共享同一块内存区域&#xff0c;从而可以在这块共享内存上进行读写操作。 1.2 应用场景 POSIX共享内存适用于需要高效地进行大量数据交换的场景&#xff0c;比如多个进程需要…

消息中间件特点

1.  消息中间件概念 消息中间件是消息传递的过程中保存消息的容器。 主要目的&#xff1a;提供路由并保证消息的传递&#xff1b;如果发送消息时接受者不可用&#xff0c;消息队列会保留信息&#xff0c;直到可以成功传递为止。 消息中间件保存消息也是有期限的。 2.  消息…

openGauss学习笔记-217 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-内存

文章目录 openGauss学习笔记-217 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-内存217.1 查看内存状况217.2 性能参数分析 openGauss学习笔记-217 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-内存 获取openGauss节点的CPU、内存、I/O和网络资源使用情况&…

加固平板电脑丨三防智能平板丨工业加固平板丨智能城市管理

随着智能城市的不断发展&#xff0c;人们对于城市管理的要求也在不断提高&#xff0c;这就需要高效、智能的城市管理平台来实现。而三防平板就是一款可以满足这一需求的智能设备。 三防平板是一种集防水、防尘、防摔于一体的智能平板电脑&#xff0c;它可以在复杂的环境下稳定运…

《Think in Java》

《Think in Java》 第一章&#xff1a;对象导论 1.1 抽象过程 1&#xff09;万物皆对象。 2&#xff09;程序是对象的集合&#xff0c;它们通过发送消息来告诉彼此所要做的。 3&#xff09;每个对象都有其他对象构成的存储&#xff0c;一个对象可以复用其他对象&#xff0c;从而…

【C++】模版初阶

目录 泛函编程 函数模版 概念 格式 原理 实例化 模版函数的匹配原则 类模板 定义格式 泛函编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, dou…